如果某个子字符串存在于内,如何防止正则表达式匹配?

时间:2012-07-06 06:56:34

标签: regex escaping substring

HTML注释可以使用内联JavaScript作为不支持JS代码的旧浏览器的特殊块。这些块看起来像这样:

<!--
some js code
//-->

我想在JS代码中区分'true'html注释。我写过这个正则表达式:

/<!--[^//]*?-->/g

所以我想在内部用双斜杠排除匹配,但正则表达式将//视为//的字符集,而不是整个双斜杠{{1} }。我该怎么办?

1 个答案:

答案 0 :(得分:5)

如您所述,字符类只匹配单个字符,因此您无法在此处使用它们。但是你可以使用negative lookahead assertions

/<!--(?:(?!//)[\s\S])*-->/g

(假设这是JavaScript)。

<强>解释

<!--     # Match <!--
(?:      # Try to match...
 (?!//)  #  (asserting that there is no // ahead)
 [\s\S]  #  any character (including newlines)
)*       # ...any number of times.
-->      # Match -->