Javascript 如何匹配带前导和尾随条件的字符串以及匹配组
我想匹配前面或后面没有其他引号的字符串Javascript 如何匹配带前导和尾随条件的字符串以及匹配组,javascript,regex,Javascript,Regex,我想匹配前面或后面没有其他引号的字符串“$USER”。我可以对后面的引号使用负前瞻,但不知道如何实现负前瞻。使用此字符串: '4' = "$NULL$" AND '3' = """$NULL$" AND '7' = """$NULL$""" 它应该只匹配第一个“$NULL$”。这是我设置的regexp: ("\$NULL\$"|"\$KEY\$")(?!") 但它不见了,回头看看 我已经看到很多答案建议使用replace函数模拟负向查找,但我不明白如何使用负向查找和捕获来实现这一点。如果您的
“$USER”
。我可以对后面的引号使用负前瞻,但不知道如何实现负前瞻。使用此字符串:
'4' = "$NULL$" AND '3' = """$NULL$" AND '7' = """$NULL$"""
它应该只匹配第一个“$NULL$”
。这是我设置的regexp:
("\$NULL\$"|"\$KEY\$")(?!")
但它不见了,回头看看
我已经看到很多答案建议使用
replace
函数模拟负向查找,但我不明白如何使用负向查找和捕获来实现这一点。如果您的条件只是引号字符不在匹配组的前面或后面,为什么不使用插入符号呢
[^"]("\$NULL\$")[^"]
您可以在替换模式中使用捕获组和反向引用:
var regex=/(^ |[^“])(“\$NULL\$”(!)/g;
var str=`'4'=“\$NULL\$”和'3'=“\$NULL\$”和'7'=“\$NULL\$”`;
log(str.replace(regex,$1[NEW\u VAL]$2[/NEW\u VAL])代码>是否要提取这些值?或者用其他东西替换?我想用没有引号的匹配的东西替换它们。因此,如果是“$NULL$”
,则替换为$NULL$
,如果是“$KEY$”
,则替换为$KEY
。更新了我问题中的示例这是一个简单的解决方案,但当OP要替换时,“$num$”
两端的符号将消失。您可以在[^”]
周围使用捕获组,但是连续匹配将不可能匹配,因为后面的[^”]
是消费模式的一部分。@WiktorStribiżew,现在我了解了符号消失的第一个问题。请提供连续匹配的第二个问题的示例。请参阅。第一个$KEY$
不匹配,因为它紧跟在第二个$NULL$
之后。还要注意,第一个$NULL$
不匹配,因为它是字符串中的第一个子字符串。@WiktorStribiżew,我知道了,谢谢。另一件事我不明白的是,为什么最后一个$KEY$
被匹配和替换,而在这段代码中,var st=`4'=“$NULL$”和'3'='$NULL$”和'7'=''“$NULL$”和'7'=“$KEY$”a`var re=/[^”](\$NULL\$\$KEY\$)“(?!”/;st.replace(re,“$1”)不是。你能看一下吗?@WiktorStribiżew,是的,非常感谢你的帮助!luckFYI之最:这与您更新的正则表达式(“\$NULL\$”;“\$KEY\$”
)的效果相同,您可以根据需要在第2组中添加任意多的替代项。谢谢,尝试总结一下我的解决方案:)虽然我还不明白@brianpck的答案有什么不同,也许你也可以在你的答案中表现出来,然后对照同样的字符串看。Brian的在字符串开头和连续匹配时不匹配(好的,这可能不是问题,但在其他情况下可能很重要)。谢谢。为什么要将(^ |[^”])
包装到捕获组中?此选项似乎也匹配(\$NULL\$)(“\$NULL\$”(!)
不,它不相同-^[^”](\$NULL\$”(“\$NULL\$”)
匹配字符串的开头或非,“$NULL$”
,“
后面不跟”
。