假设我有一长串文本,并且我希望每次this在圆括号内提到该词时捕获.我怎么能这样做?以下模式仅匹配第一个this,忽略后面的每个匹配:
/\(.*(this).*\)/g
Run Code Online (Sandbox Code Playgroud)
例如,在以下文本中使用上面的模式:
Etiam scelerisque,nunc ac egestas consequat,(odio this nibh euismod nulla,eget auctor orci nibh vel this nisi.Aliquam this erat volutpat).
只会this在单词之后返回第一个odio.
我究竟做错了什么?
首先,不要贪心.
/\(.*?(this).*?\)/g
其次,如果你的目标是计算'this'的出现次数,那么正则表达式可能不是正确的工具.问题是您需要匹配结束分隔符以确定第一个'this'被包含在内,这意味着继续应用正则表达式将不会匹配已经消耗的分隔符集内的任何内容.
我上面的正则表达式会抓住以下内容:
foo (baz this bar) (foo this)
但不是(它只匹配两次,每组分隔符一次):
foo (this this bar) baz (this this this)
尝试使用简单的单程扫描仪而不是正则表达式.另一种方法是使用两个正则表达式,一个用于将字符串分隔为封闭和非封闭的部分,另一个用于在封闭区域内搜索.