使用特殊字符替换所有在Javascript中不起作用

use*_*911 0 javascript

我有一个字符串

var str = "{CPARTY_<BPARTY+_DPARTY}";
Run Code Online (Sandbox Code Playgroud)

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

 var find = "{CPARTY_<BPARTY+_DPARTY}";
Run Code Online (Sandbox Code Playgroud)

并用下面的字符串替换它.

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

这不起作用.这意味着没有更换.没有异常抛出.

str = str.replace(new RegExp(find, 'g'), replace);
Run Code Online (Sandbox Code Playgroud)

这有效.

str = str.replace(find, replace);
Run Code Online (Sandbox Code Playgroud)

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

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

Fra*_*bot 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);
Run Code Online (Sandbox Code Playgroud)

(来源)