2014-01-08 113 views
2

我想在javascript中替换所有出现的字符串;替换所有在javascript中包含特殊字符的字符串

在我的search文本我有特殊的字符,我不能逃避它们;

我需要用给定的字符串替换${wid}文本;

我有这样的功能:

function replaceAll(find, replace, str) { 
     return str.replace(new RegExp(find, 'g'), replace); 
    } 

应该做的工作;

var inner_code = replaceAll('/\$\{wid\}/', 'id_' + widget.model_attributes.id, widget.code); 

widget.model_attributes.id是正整数

widget.code是:

<div id="code_50"><div id="${wid}"></div> 
<script type="text/javascript"> 
    $("#${wid}").text("hello world"); 
</script></div> 

P.S:这不是一个重复的问题;我不知道如何逃避特殊字符使用JS

+0

[在JavaScript中替换所有出现的字符串?]可能的重复(http://stackoverflow.com/questions/1144783/replacing-all-occurrences-of-a-string-in-javascript) – melancia

+0

它不是重复!这是一个问题,我不明白它 –

+1

正则表达式构造函数接受一个字符串,所以你必须双重转义所有特殊字符,只需使用正则表达式。 – elclanrs

回答

2

您需要转义反斜杠本身。试试:

replaceAll('\\$\\{wid\\}', 'id_' + ...) 

您正在编写JavaScript字符串文字。您希望字符串的内容为“\ $ \ {wid \}”,因为那是您想要的RegExp源代码。由于反斜杠意味着字符串文字中的某些内容,因此您需要将其转义(通过在其前面放置另一个反斜杠)。

我建议不使用的replaceAll功能,只是写:

var inner_code = widget.code.replace(/\$\{wid\}/g, 'id_' + widget.model_attributes.id); 

这可以让你保持了正则表达式的正则表达式的文本,这是非常容易不是通过串去文字和阅读RegExp构造函数。

1

您不正确创建您的正则表达式。使用文字表达式:

function replaceAll(find, replace, str) { 
    return str.replace(new RegExp(find), replace); 
} 
var inner_code = replaceAll(/\${wid}/g, 'id_' + widget.model_attributes.id, widget.code); 
+0

这是不工作...无论如何10x –

相关问题