2012-06-12 19 views
0

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

它真的很难破译你需要在这里做了什么。也许你可以说更好一点? –

+0

啊,我明白了。 @amnotiam的答案应该这样做 –

回答

3

,如果你有在正则表达式中捕获组这应该只发生。

如果您不希望自己的群组捕获,请将?:置于群组的开头。

/foo(?:bar)/ 
+0

工作,谢谢。正如我在看如何写出一个更好的例子,你遇到了什么问题,你回答了,显然我被否定了3次...真棒... – WPAflight

0

您可以转义$。例如:

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

有用当你捕获组和需要写一个$

+0

但是如果我无法控制内容进入,我必须搜索通过1美元的字符串添加这些斜杠,然后我将再次使用正则表达式来查找所有这些字符串,然后我将回到原点。无论如何感谢你 – WPAflight

1

如果您有想要把你的电话replace()可能有可能$N的在这一个变量字符串,可以防止被视为反向引用的$N$$更换$。显然,与JS正则表达式中的其他特殊字符不同,$字符不能用\转义 - 必须使用前面的$(参见图)进行转义。

在你的榜样,你可以做以下来解决该问题:

data = data.replace(regexp, string1.replace('$', '$$$')); 

这应该使任何$的成$$string1,防止它们被视为反向引用。

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

+0

非常有用的指出'$'必须用另一个'$'转义。 – Jonah