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$”
后面不跟