【问题标题】:Regex help: Break up words for complete the sentence quiz正则表达式帮助:分解单词以完成句子测验
【发布时间】:2012-07-18 03:09:04
【问题描述】:

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

_______棕色狐狸跳过懒惰的_ ____

第 1 步: 将向用户显示一个文本框以输入句子。
第 2 步: 句子将被分解为实际单词(没有逗号、句号等)到一个数组中。
第 3 步:在后台,我将遍历每个 单词 并将它们包裹在锚点<a />
第 4 步: 用户将能够单击一个或多个单词来标记它们以供测验者完成。我将对此进行一些验证。
第 5 步: 最终结果将是一个带有空格的句子,其中包含随机数 (1-n) 的额外字符,因此单词长度没有确切的提示。

我可以使用大部分功能,但我需要将句子拆分成确切的单词(大概使用正则表达式)。

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

可能还有其他我想不到的规则,很高兴您发表评论并提出建议。

我从一个基本的jsFiddle 开始,它只是用空格分隔。

感谢阅读。

【问题讨论】:

    标签: javascript jquery regex


    【解决方案1】:

    非词分割

    单词是字母、单引号和连字符的组合,任何重复的都是非单词。

    为此,请将split 语句更改为以下内容:

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

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

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

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

    【讨论】:

    • 这行得通,但是我想保留标点符号,以免句子被打断。
    • 然后使用text.match捕获分隔符,并在构造句子时重新插入。
    • <a...> 添加到结果后,还将splitArray 的相应条目添加到结果中。注意splitArray的大小比textArray的小一。
    【解决方案2】:

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

    [\w'-]+
    

    就是这样。

    适用于这一行:

    我喜欢 2 有“冰淇淋”,​​dude's 和 dude-ettes。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      相关资源
      最近更新 更多