正则表达式(正则表达式)模式不包含字符串

时间:2010-02-25 09:04:41

标签: regex

已经问过here,但提问者对2个字符的发现答案感到满意。我重复他的基本问题:

  

一般来说,有什么办法,怎么样   说不包含相同的字符串   我可以说不包含的方式   带[^ a]的字符?

我想创建一个匹配两个结束字符串的regexp以及它们之间的所有内容,但前提是在内部找不到给定字符串的其他内容。 但我对所引用问题的一般答案最满意

示例:

字符串为"<script>""</script>"

它应匹配

"<script> something something </script>"

但不是

"<script> something <script> something something </script>"

3 个答案:

答案 0 :(得分:3)

您是否阅读了我对该问题的回答?它提供了更通用的解决方案。在你的情况下,它看起来像这样:

(?s)<script>(?:(?!</?script>).)*</script>

换句话说:匹配开场序列;然后一次匹配一个字符,之后确保它不是结束序列的开始;然后匹配结束序列。

答案 1 :(得分:1)

您问题的正确表达方式是

"^<script>((?!<script>).)*</script>$"

不应用于html操作。这不涉及像

这样的情况
<script> foo <script type="javascript"> bar </script>

和其他许多人。解析器是正确的解决方案。

匹配以START开头的字符串的更一般的表达式,以END结尾,而中间没有特定的字符序列foobar

"^START((?!foobar).)*END$"

答案 2 :(得分:1)

使用negative lookahead。 Lookarounds给出零宽度匹配 - 意味着它们不消耗源字符串中的任何字符。

var s1 = "some long string with the CENSORED word";
var s2 = "some long string without that word";
console.log(s1.match(/^(?!.*CENSORED).*$/));//no match
console.log(s2.match(/^(?!.*CENSORED).*$/));//matches the whole string

否定前瞻的语法是(?!REGEX)。它会搜索REGEX,如果找到匹配则返回false。如果找到匹配项,则前瞻性前瞻(?=REGEX)将返回true。