如何匹配具有开头和结尾条件以及匹配组的字符串

How to match a string with leading and trailing conditions and a matching group

本文关键字:字符串 条件 何匹配 开头 结尾      更新时间:2023-09-26

我想匹配之前或之后没有另一个引号的字符串"$USER"。我可以对尾引号使用负向后查找,但不知道如何实现负向后查找。使用这个字符串:

'4' = "$NULL$" AND '3' = """$NULL$" AND '7' = """$NULL$"""

应该只匹配第一个"$NULL$"。下面是我放上去的regexp:

("'$NULL'$"|"'$KEY'$")(?!")

但是它缺少向后看。

我已经看到了许多答案建议模仿负向后看与replace功能,但我不能理解这是如何可以与负向前看和捕获。

您可以使用捕获组并在替换模式中使用反向引用:

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$"字符串
  • (?!") -之后没有"

如果您的条件只是引号字符不在匹配组的前面或后面,为什么不直接使用插入符号呢?

[^"]("'$NULL'$")[^"]