正则表达式帮助:分解单词以完成句子测验

时间:2012-07-19 00:20:36

标签: javascript jquery regex

我正在用JS编写一个脚本,用于生成完成句子类型的测验。

  

_ __ _ __ _ 棕色狐狸跳过懒惰的 _ __ _ _

第1步:将向用户显示一个文本框以放入句子。
第2步:句子将被分解为数组中的实际单词(无逗号,句号等)。
第3步:在后台,我将遍历每个 ,并将它们包装在一个锚<a /> 第4步:用户可以点击一个或多个单词来标记它们,以便测验者完成。我会围绕这个做一些验证。
步骤5:最终结果将是一个带有空格的句子,这些句子是用随机数(1-n)的额外字符选择的,所以对于单词长度没有确切的提示。

大多数功能我都很好,但我需要将句子分成精确的单词(大概使用正则表达式)。

有一些规则,应该忽略逗号和句号以及任何特殊字符。我也在考虑限制输入,以便不允许特殊字符使这更容易。单引号和连字符应包含在单词匹配中,因为某些单词包含这些单词。

可能还有其他一些我无法想到的规则,因此您可以发表评论并提出建议。

我已经开始使用基本的jsFiddle,它只是用空格分隔。

感谢阅读。

2 个答案:

答案 0 :(得分:1)

按非单词分组

一个单词是字母,单引号和连字符的组合,其他重复的单词都是非单词。

要实现此目的,请将split语句更改为以下内容:

var textArray = text.split(/[^a-zA-Z'-]+/)

Javascript won't split using regex,除非您使用/来定义正则表达式。

为了保留分隔符,请使用match捕获它们,然后按照捕获的顺序重新插入它们。

var splitArray = text.match(/[^a-zA-Z'-]+/)

答案 1 :(得分:0)

嗯......我有一个非常简单的解决方案:

[\w'-]+

就是这样。

适用于此行:

我喜欢2有“冰淇淋”,​​老兄和老兄。

是的,这是一个奇怪的句子。但它起到了测试用例的作用。试试吧。它将包含数字2作为一个单词。不确定你是否想要那个。只需在连字符旁边添加您需要的任何其他特殊字符。