替换所有特殊字符并不适用于Javascript

时间:2017-01-27 22:13:28

标签: javascript

我有一个字符串

[0, 1, 2, 3, 4]

我需要在主字符串(str)中找到下面字符串(find)的所有出现。

var str = "{CPARTY_<BPARTY+_DPARTY}";

并将其替换为以下字符串。

 var find = "{CPARTY_<BPARTY+_DPARTY}";

这不起作用。这意味着没有更换。没有例外。

var replace = "<span><div  ng-click='myClick($event)' title='null' data-token='CPARTY_<BPARTY+_DPARTY'  style='display: inline;'>{CPARTY_&lt;BPARTY+_DPARTY}</div></span>";

这很有效。

str = str.replace(new RegExp(find, 'g'), replace);

我想使用替换所有语法。我已经意识到它与特殊字符有关&lt;和$ lt;如果我没有&lt;和$ lt; ,没有问题。我知道这是一件非常愚蠢但却无法解决的问题。

的jsfiddle https://jsfiddle.net/848c1as4/9/

2 个答案:

答案 0 :(得分:5)

正则表达式中有几个字符具有特殊含义。例如,+(。在RegExp中使用它之前,您必须通过转义来对待它们。

var str = "{CPARTY_&lt;BPARTY+_DPARTY}";
var find = "{CPARTY_&lt;BPARTY+_DPARTY}";
var safeFind = find.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g,"\\$&");
var replace = "<span><div  ng-click='myClick($event)' title='null' data-token='CPARTY_<BPARTY+_DPARTY'  style='display: inline;'>{CPARTY_&lt;BPARTY+_DPARTY}</div></span>";
str = str.replace(new RegExp(safeFind, 'g'), replace);

source

答案 1 :(得分:1)

你必须逃避正则表达式,看看如何here。或者使用split join组合,如下所述here

str = str.split(find).join(replace);