为什么结果中包含负前瞻?

时间:2018-08-02 16:10:12

标签: regex regex-lookarounds

Im使用表达式:

(?!.+\]\:)(.+)/g

字符串:

some text I dont wan't ]: some text I want

结果:

]: some text I want

我的印象是前瞻从以下匹配结果中排除了。那么,为什么]:被包含在结果中呢?也许是前瞻中的+,但我不知道该用什么替换。

3 个答案:

答案 0 :(得分:5)

这是因为您使用的前瞻性断言我们没有任何1+个字符,后面跟着<div class="dropdown" id="dropdown"> <button class="dropbtn">Dropdown</button> <div class="dropdown-content" id="dropdown-content"> <a href="#">Link 1</a> <a href="#">Link 2</a> <a href="#">Link 3</a> </div> </div> <script> var dropdown = document.getElementById("dropdown"); var open = false; dropdown.onclick = function(){ if(!open){ document.getElementById("dropdown-content").style.display = "block"; open = true; } else { document.getElementById("dropdown-content").style.display = "none"; open = false; } } window.addEventListener("click", function(event){ if(!dropdown.contains(event.target)){ document.getElementById("dropdown-content").style.display = "none"; open = false; console.log("Click outside of dropdown"); } }); </script>]。它会在:之前开始匹配,因为超前条件从该位置开始满足(任何字符都超过1个字符)。

您可能的意思是像这样的回头路

]:

RegEx Demo

答案 1 :(得分:3)

遵循更简单的正则表达式可为您提供正确的结果:

(?<=]: )(.+)

输出:

some text I want

在某些特定字符可用时(在这种情况下为]:),无需包含通配符。

这里不需要转义符,但可以使用转义符-结果保持不变。

答案 2 :(得分:0)

我认为否定的超前行为是assertion,因此它实际上不会消耗它匹配的任何字符。我认为您的(。+)与之匹配。

您可以使用:

(?!.+\]\:)\s+(.+)

然后您可以使用第1组

Example Online