2017-01-27 3 views
0

ich alle Vorkommen vonErsetzen Sie alle mit Sonderzeichen funktioniert nicht in Javascript

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

Ich brauche zu finden eine Zeichenfolge haben unter string (finden) in Haupt string (str).

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

und durch untenstehende Zeichenfolge ersetzen.

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

Dies funktioniert nicht. Das bedeutet, dass kein Ersatz gemacht wird. Keine Ausnahme ausgelöst.

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

Das funktioniert.

str = str.replace(find, replace); 

Ich möchte das ersetzen alle syntax.I verwenden haben erkannt, dass es etwas mit Sonderzeichen < und $ lt zu tun; Wenn ich nicht < und $ lt habe; Es gibt kein Problem. Ich weiß, es ist etwas sehr albern, aber ich kann es nicht herausfinden.

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

+0

diese Zeichen Escaping funktionieren könnte – Randy

+0

Die Zeichenfolge Sie gehen in 'neue RegExp' gültiger regulärer Ausdruck sein muss. Was Sie gerade haben, ist eigentlich eine gültige Regex, es passt einfach nicht zu Ihrer Zeichenfolge. Wie @Randy erwähnt, ist das Austreten von Zeichen in regulären Ausdrücken der Schlüssel. –

+0

@Mike McCaughan - Ich habe es nicht verstanden, als du gesagt hast, dass meine Regex nicht zu meiner Saite passt. Str und Fund sind genau gleich. – user911

Antwort

5

Mehrere Zeichen haben eine besondere Bedeutung in regex. Zum Beispiel + und (. Sie müssen sie behandeln, bevor Sie sie in RegExp verwenden, indem Sie entkommen sie.

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)

+0

Ich stehle das. Vielen Dank! –

+0

Oh mein, diese Regex. Nein nein Nein Nein Nein. – Amy

+0

Was empfehlen Sie? –

1

Sie haben den regulären Ausdruck zu entkommen sehen, wie here. Oder verwenden Sie ein splitjoin Combo als here wie folgt erwähnt:

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