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)
如果您有想要把你的一个变量字符串replace()调用,它有可能会具有$N的在里面,可以防止$N被视为通过更换反向引用$用$$。显然,与 JS 正则表达式中的其他特殊字符不同,该$字符不能用 a 转义\- 它必须用前面的$(去图)转义。
在您的示例中,您可以执行以下操作来解决问题:
data = data.replace(regexp, string1.replace('$', '$$$'));
Run Code Online (Sandbox Code Playgroud)
这应该将 any$变成$$in string1,防止它们被视为反向引用。
(注意:我在这里找到了这个小金块)