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

时间:2012-06-12 21:37:48

标签: javascript regex replace backreference

我有一个用户可以随时编辑的字符串,以及正在对字符串进行的正则表达式,将其添加到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>

3 个答案:

答案 0 :(得分:3)

只有在正则表达式中有一个捕获组时才会发生这种情况。

如果您不希望群组捕获,请将?:放在群组的开头。

/foo(?:bar)/

答案 1 :(得分:3)

如果您要在replace()来电中添加可能包含$N的变量字符串,则可以阻止$N成为$$$替换为$,将其视为反向引用。显然,与JS正则表达式中的其他特殊字符不同,\字符无法使用$进行转义 - 必须使用前面的data = data.replace(regexp, string1.replace('$', '$$$')); 进行转义(转到图)。

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

$

这应该将$$转换为string1中的{{1}},防止它们被视为反向引用。

(注意:我发现了这个小金块here

答案 2 :(得分:0)

您可以转义$。例如:

var replacement = '<item id="1">i have \\$100</item>';

当您拥有捕获组并需要编写$时很有用。