我需要找到输入文本中包含 (?i:val)
并且不再是 5 个字符的所有单词。
到目前为止我得到: \b([a-zA-Z]*(?i:val)[a-zA-Z]*){1,4}\b
如果我们查看此示例文本:在计算机科学中,值是无法进一步计算的表达式(正常形式)。 Val 也是一个匹配
我得到 3 个匹配项(value
、evaluated
和 Val
),但是 evaluated
不应与模式匹配,因为它太长了。正确的方法是什么?
最佳答案
您的模式不考虑匹配单词的长度。
使用单词边界和前瞻,如下所示:
(?i)\b(?=\w*val)\w{1,5}\b
正则表达式匹配:
\b
- 前导字边界,因为下一个模式是\w
(?=\w*val)
- 前瞻,确保零个或多个单词字符后有一个val
子字符串\w{1,5}
- 匹配 1 到 5 个单词字符\b
- 尾随单词边界,阻止长度超过 5 个字符的单词匹配
您可以使用 ASCII JS 版本的正则表达式:
/\b(?=[a-z]*val)[a-z]{1,5}\b/i
关于regex - 如何查找包含大小有限的字符串的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34688017/