已经问过here,但提问者对2个字符的发现答案感到满意。我重复他的基本问题:
一般来说,有什么办法,怎么样 说不包含相同的字符串 我可以说不包含的方式 带[^ a]的字符?
我想创建一个匹配两个结束字符串的regexp以及它们之间的所有内容,但前提是在内部找不到给定字符串的其他内容。 但我对所引用问题的一般答案最满意
示例:
字符串为"<script>"
和"</script>"
它应匹配
"<script> something something </script>"
但不是
"<script> something <script> something something </script>"
答案 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。