我如何忽略 $1 替换 javascript 中的反向引用

WPA*_*ght 0 javascript regex backreference replace

我有一个用户可以随时编辑的字符串,以及一个正在对该字符串进行的正则表达式,将其添加到 xml 中,然后保存它,但他们可以将 '$1' 添加到字符串中。我只想保存文本“$1”,但我必须对 $1 所在的同一个字符串执行正则表达式。它每次都用正则表达式中的一个字符替换 $1。

如何查找并替换此字符串中的 $1?

正在发生的事情的例子:

string1 = '<item id="1">i have $100</item>'

regexp = new RegExp('<item id="1"([^<]|<[^\/]|<\/[^i]|<\/i[^t]|<\/it[^e]|<\/ite[^m]|<\/item[^>])*<\/item>');

data = '<data><item id="1">i have no money</item><item id="2">i have no money</item></data>'

data = data.replace(regexp, string1);
Run Code Online (Sandbox Code Playgroud)

结果

<data><item id="1">i have >00</item><item id="2">i have no money</item></data>
Run Code Online (Sandbox Code Playgroud)

bre*_*dev 6

如果您有想要把你的一个变量字符串replace()调用,它有可能会具有$N的在里面,可以防止$N被视为通过更换反向引用$$$。显然,与 JS 正则表达式中的其他特殊字符不同,该$字符不能用 a 转义\- 它必须用前面的$(去图)转义。

在您的示例中,您可以执行以下操作来解决问题:

data = data.replace(regexp, string1.replace('$', '$$$'));
Run Code Online (Sandbox Code Playgroud)

这应该将 any$变成$$in string1,防止它们被视为反向引用。

(注意:我在这里找到了这个小金块)