2017-04-03 4 views
0

Ich muss alle übereinstimmenden Wörter oder Sonderzeichen in einer Zeichenfolge ersetzen, kann aber nicht einen Weg, dies zu tun.Regexp ersetzen alle genau übereinstimmenden Wörter/Zeichen in Zeichenfolge

Zum Beispiel habe ich eine Zeichenfolge: "This - is a great victory"

Ich brauche alle - mit + Zeichen zu ersetzen. Oder great mit unpleasant - Benutzer wählt ein zu ersetzendes Wort aus und gibt Ersatz dafür.

arbeitete fie, bis ich erkannte, dass \ b funktioniert nur mit Wortzeichen.

Die Frage ist also: Was ist Ersatz für \ b würde ich jedes passende Wort ersetzen, die von Leerzeichen eingeschlossen ist?

BEARBEITEN: Ich kann Wortgrenzen nicht entfernen, da dies zu ungenauer Übereinstimmung führen würde. Zum Beispiel: Du bist der Schöpfer deiner Welt, während du dich veränderst, auch du würdest verändert werden. wie es "Sie"

+0

Wenn die verknüpfte Frage Ihnen nicht hilft, bearbeiten Sie Ihre Frage, um zu beschreiben, wie sich Ihr Problem unterscheidet. Beachten Sie, dass Ihr Problem gerade die Wortgrenzen sind, und entfernen Sie sie, erhalten Sie das gewünschte Verhalten. –

+0

Ich habe die Antwort bearbeitet. Wortgrenzen können nicht entfernt werden, da eine genaue Übereinstimmung erforderlich ist – user3482211

+0

Ok, aber Sie haben nicht erklärt, wonach die gesuchten Wörter sind. '-' ist aus sprachlicher Sicht kein Wort. Was ist deine Definition eines "Wortes" hier? –

Antwort

0

enthält müssen Sie den folgenden Code verwenden:

var s = "you are creator of your world"; 
 
var search = "you"; 
 
var torepl = "we"; 
 
var rx = new RegExp("(^|\\s)" + search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + "(?!\\S)", "gi"); 
 
var res = s.replace(rx, "$1" + torepl); 
 
console.log(res);

Die (^|\\s) wird übereinstimmen und erfassen in Gruppe 1 Anfang der Zeichenfolge oder ein Leerzeichen. Die search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') wird spezielle Zeichen (falls vorhanden) innerhalb des Suchwortes entkommen lassen. Die Lookahead (?!\\S) erfordert ein Leerzeichen oder ein Ende der Zeichenfolge direkt nach dem Suchwort.

Die Backreference $1 fügt den Inhalt der Gruppe 1 während des Ersetzens wieder in die Zeichenfolge ein (es sind keine Lookbehinds erforderlich).

0

Wie etwa zwei ersetzt

var txt = "This - is a great, great - and great victory" 
 
var originalTex1 = "great",originalTex2 = "-", 
 
re1 = new RegExp("\\b"+originalTex1+"\\b","g"), 
 
re2 = new RegExp("\\s"+originalTex2+"\\s","g") 
 

 
console.log(txt.replace(re1,"super").replace(re2," + "))

+0

Das funktioniert fast. Problem ist, dass \\ s Whitespace vorne enthält, wenn also das Symbol ersetzt wird, wird es mit der vorhergehenden Zeichenfolge verknüpft. – user3482211

Verwandte Themen