我正在用JS编写一个脚本,用于生成完成句子类型的测验。
_ __ _ __ _ 棕色狐狸跳过懒惰的 _ __ _ _
第1步:将向用户显示一个文本框以放入句子。
第2步:句子将被分解为数组中的实际单词(无逗号,句号等)。
第3步:在后台,我将遍历每个 字 ,并将它们包装在一个锚<a />
第4步:用户可以点击一个或多个单词来标记它们,以便测验者完成。我会围绕这个做一些验证。
步骤5:最终结果将是一个带有空格的句子,这些句子是用随机数(1-n)的额外字符选择的,所以对于单词长度没有确切的提示。
大多数功能我都很好,但我需要将句子分成精确的单词(大概使用正则表达式)。
有一些规则,应该忽略逗号和句号以及任何特殊字符。我也在考虑限制输入,以便不允许特殊字符使这更容易。单引号和连字符应包含在单词匹配中,因为某些单词包含这些单词。
可能还有其他一些我无法想到的规则,因此您可以发表评论并提出建议。
我已经开始使用基本的jsFiddle,它只是用空格分隔。
感谢阅读。
答案 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作为一个单词。不确定你是否想要那个。只需在连字符旁边添加您需要的任何其他特殊字符。