我希望匹配不在其他引号之前或之后的字符串"$USER"
。我可以对尾随引用使用否定前瞻,但无法弄清楚如何实现负面后瞻。使用此字符串:
'4' = "$NULL$" AND '3' = """$NULL$" AND '7' = """$NULL$"""
它应该只匹配第一个"$NULL$"
。这是我提出的正则表达式:
("\$NULL\$"|"\$KEY\$")(?!")
但它缺少了后视。
我已经看到许多答案暗示用replace
函数模仿负面的后视,但我无法理解如何通过负面预测和捕获来完成这项工作。
答案 0 :(得分:3)
您可以使用捕获组并在替换模式中使用反向引用:
var regex = /(^|[^"])("\$NULL\$")(?!")/g;
var str = `'4' = "\$NULL\$" AND '3' = """\$NULL\$" AND '7' = """\$NULL\$"""`;
console.log(str.replace(regex, "$1[NEW_VAL]$2[/NEW_VAL]"));

详细
(^|[^"])
- 第1组(替换模式中称为$1
)捕获字符串(^
)的开头或除"
以外的任何字符("\$NULL\$")
- 第2组(替换模式中称为$2
)捕获"$NULL$"
字符串(?!")
- "
答案 1 :(得分:1)
如果您的条件只是引号字符不在匹配组之前或之后,为什么不使用插入符?
[^"]("\$NULL\$")[^"]