我有一个用户可以随时编辑的字符串,以及一个正在对该字符串执行的正则表达式,将其添加到 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);
结果
<data><item id="1">i have >00</item><item id="2">i have no money</item></data>
最佳答案
如果您想将变量字符串放入 replace()
中调用可能有$N
在里面,你可以防止$N
通过替换 $
避免被视为反向引用与 $$
。显然,与 JS 正则表达式中的其他特殊字符不同,$
字符不能使用 \
进行转义- 必须使用前面的 $
进行转义(看图)。
在您的示例中,您可以执行以下操作来解决该问题:
data = data.replace(regexp, string1.replace('$', '$$$'));
这应该变成任何 $
进入$$
在string1
,防止它们被视为反向引用。
(注意:我发现了这个小金 block here )
关于javascript - 如何忽略 javascript 中的 $1 替换反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11005248/