如何从正则表达式匹配中排除这种模式?

时间:2015-11-23 08:57:40

标签: javascript regex

我想撰写一个正则表达式来突出显示关键字。

正则表达式有点像

\btap\b.

对于下面的句子,它预计只匹配一个“tap”而没有双引号。但实际上,它也匹配引号中的第二个“敲击”。

tap click "tap"

如何排除匹配的第二个分词?

2 个答案:

答案 0 :(得分:0)

这似乎工作正常。

Ty
  

<强>规则

     
      
  1. 起始字

  2.   
  3. 最后没有引用

  4.   
  5. 不区分大小写。

  6.   

Fiddle

答案 1 :(得分:0)

单词边界\b匹配任何非单词字符(因此"也是如此)。

您可以模拟自己的单词边界,只包含您认为合适的内容。

例如:

\s|^|\.|!|\?|$ - 字符串,圆点,感叹号,问号或字符串结尾的空格或开头

我还建议使用负面的lookbehinds / -aheads但是......

Javascript不支持lookbehinds

因此,您可以使用一些捕获组,然后使用您需要的组。

示例正则表达式:(?:\s|^|\.|!|\?)(tap)(\s|$|\.|!|\?)

然后在javascript中使用第一个捕获组 - match[1]

有关如何在JavaScript中使用捕获组的详细信息,请参阅this SO answer