Im使用表达式:
(?!.+\]\:)(.+)/g
字符串:
some text I dont wan't ]: some text I want
结果:
]: some text I want
我的印象是前瞻从以下匹配结果中排除了。那么,为什么]:
被包含在结果中呢?也许是前瞻中的+
,但我不知道该用什么替换。
答案 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个字符)。
您可能的意思是像这样的回头路
]:
答案 1 :(得分:3)
遵循更简单的正则表达式可为您提供正确的结果:
(?<=]: )(.+)
输出:
some text I want
在某些特定字符可用时(在这种情况下为]:
),无需包含通配符。
这里不需要转义符,但可以使用转义符-结果保持不变。
答案 2 :(得分:0)
我认为否定的超前行为是assertion
,因此它实际上不会消耗它匹配的任何字符。我认为您的(。+)与之匹配。
您可以使用:
(?!.+\]\:)\s+(.+)
然后您可以使用第1组