如何查找包含有限大小的字符串的单词

时间:2016-01-08 23:51:44

标签: regex

我需要找到输入文本中包含(?i:val)且不再是5个字符的所有单词。 到目前为止,我得到了:\b([a-zA-Z]*(?i:val)[a-zA-Z]*){1,4}\b

如果我们采用此示例文字来查看:In computer science, a value is an expression which cannot be evaluated any further (a normal form). Val is also a match

我得到3场比赛(valueevaluatedVal),但是evaluated不应该与模式匹配,因为它太长了。什么是正确的方法?

2 个答案:

答案 0 :(得分:3)

您的模式未考虑匹配的字词的长度。

使用单词边界和这样的前瞻:

(?i)\b(?=\w*val)\w{1,5}\b

请参阅regex demo

正则表达式匹配:

  • \b - 自下一个模式为\w
  • 以来的前导词边界
  • (?=\w*val) - 确保在零个或多个单词字符后面有val子字符串的预测
  • \w{1,5} - 匹配1到5个字符
  • \b - 尾随单词边界,用于停止匹配
  • 超过5个字符的单词

您可以使用正则表达式的ASCII JS版本:

/\b(?=[a-z]*val)[a-z]{1,5}\b/i

答案 1 :(得分:1)

了解为什么"评估"匹配。注意:

  • [a-zA-Z]*与" e"
  • 相匹配
  • (?i:val)匹配" val"
  • [a-zA-Z]*匹配" uated"

实际上这里没有重复!该模式仅在一次迭代中匹配。

您可以使用lookarounds实现所需,但我认为正则表达式不是执行此任务的最佳工具。我强烈建议您使用其他功能,具体取决于您拥有的功能。