Ich möchte eine String.replaceAll()
Methode in JavaScript erstellen und denke, dass die Verwendung eines regulären Ausdrucks der knappste Weg wäre, dies zu tun. Ich kann jedoch nicht herausfinden, wie eine Variable an einen regulären Ausdruck übergeben wird. Ich kann dies bereits tun, wodurch alle Instanzen von "B"
durch ersetzt werden "A"
.
"ABABAB".replace(/B/g, "A");
Aber ich möchte so etwas tun:
String.prototype.replaceAll = function(replaceThis, withThis) {
this.replace(/replaceThis/g, withThis);
};
Aber dies ersetzt natürlich nur den Text. "replaceThis"
Wie übergebe ich diese Variable an meine Regex-Zeichenfolge?
javascript
regex
JC Grubbs
quelle
quelle
Antworten:
Anstatt die
/regex/g
Syntax zu verwenden, können Sie ein neues RegExp- Objekt erstellen :Auf diese Weise können Sie Regex-Objekte dynamisch erstellen. Dann wirst du tun:
quelle
/\/word\:\w*$/
, müssen Sie Ihre Backslashes vermeiden :new RegExp( '\\/word\\:\\w*$' )
./
hat keine besondere Bedeutung, wenn Sie Regex aus einem String erstellen , sodass Sie ihm nicht entkommen müssen./\/word\:\w*$/
sollte seinnew RegExp('/word\\:\\w*$')
Wie Eric Wendelin erwähnte, können Sie so etwas tun:
Dies ergibt
"regex matching ."
. Es wird jedoch fehlschlagen, wenn str1 ist"."
. Sie würden erwarten, dass das Ergebnis"pattern matching regex"
den Punkt durch ersetzt"regex"
, aber es wird sich herausstellen, dass ...Dies liegt daran, dass
"."
der RegExp-Konstruktor , obwohl es sich um eine Zeichenfolge handelt, immer noch als regulärer Ausdruck interpretiert wird, dh jedes Zeichen ohne Zeilenumbruch, dh jedes Zeichen in der Zeichenfolge. Zu diesem Zweck kann die folgende Funktion nützlich sein:Dann können Sie tun:
Nachgeben
"pattern matching regex"
.quelle
-
und eingeschlossen werden=!:/
.Wie immer: Verwenden Sie keinen regulären Ausdruck, es sei denn, Sie müssen. Für ein einfaches Ersetzen von Zeichenfolgen lautet die Redewendung:
Dann müssen Sie sich keine Gedanken über die in Gracenotes 'Antwort erwähnten Zitierprobleme machen.
quelle
split
undreplace
kann entweder einen String oder einRegExp
Objekt aufnehmen. Das Problem,replace
dassplit
dies nicht hat, ist, dass Sie bei Verwendung einer Zeichenfolge nur einen einzigen Ersatz erhalten.Wenn Sie ALLE Vorkommen erhalten möchten (
g
), achten Sie nicht auf Groß- und Kleinschreibung (i
) und verwenden Sie Grenzen, damit es sich nicht um ein Wort in einem anderen Wort handelt (\\b
):Beispiel:
quelle
rx
-Stil-Interpolation über Template-Strings beantwortet wird.)Für alle, die Variablen mit der Match- Methode verwenden möchten, hat dies bei mir funktioniert
quelle
Diese:
ist gleichbedeutend damit:
Siehe http://www.w3schools.com/jsref/jsref_obj_regexp.asp .
quelle
pattern
als Variable verwendet, im zweiten als Stringquelle
Sie möchten den regulären Ausdruck dynamisch erstellen, und die richtige Lösung besteht darin, den
new RegExp(string)
Konstruktor zu verwenden. Damit der Konstruktor Sonderzeichen wörtlich behandeln kann, müssen Sie ihnen entkommen. Das Widget für die automatische Vervollständigung der jQuery-Benutzeroberfläche verfügt über eine integrierte Funktion mit dem Namen$.ui.autocomplete.escapeRegex
:Wenn Sie die jQuery-Benutzeroberfläche verwenden, können Sie diese Funktion verwenden oder ihre Definition aus der Quelle kopieren :
Und benutze es so:
quelle
Testen Sie mit diesem Tool
quelle
Testen Sie es wie:
quelle
Hier ist eine weitere Implementierung von replaceAll:
quelle
Und die Coffeescript-Version von Steven Pennys Antwort, da dies das zweite Google-Ergebnis ist ... auch wenn Kaffee nur Javascript ist und viele Zeichen entfernt wurden ...;)
und in meinem speziellen Fall
quelle
robot.name=hubot
ist kein Javascript.Während Sie dynamisch erstellte RegExps erstellen können (wie in den anderen Antworten auf diese Frage angegeben), werde ich meinen Kommentar aus einem ähnlichen Beitrag wiederholen : Die funktionale Form von String.replace () ist äußerst nützlich und reduziert in vielen Fällen den Bedarf an dynamisch erstellte RegExp-Objekte. (Dies ist eine Art Schmerz, da Sie die Eingabe in den RegExp-Konstruktor als Zeichenfolge ausdrücken müssen, anstatt das Literalformat Schrägstriche / [AZ] + / regexp zu verwenden.)
quelle
Um mein Bedürfnis zu befriedigen, eine Variable / einen Alias / eine Funktion in einen regulären Ausdruck einzufügen, habe ich mir Folgendes ausgedacht:
Dabei ist 'oldre' der ursprüngliche reguläre Ausdruck, in den ich eine Variable einfügen möchte, 'xx' der Platzhalter für diese Variable / diesen Alias / diese Funktion und 'yy' der tatsächliche Variablenname, Alias oder die eigentliche Funktion.
quelle
Sie können dies verwenden, wenn $ 1 nicht mit Ihnen zusammenarbeitet
quelle
Sie können immer
indexOf
wiederholt verwenden:Dies geht nicht in eine Endlosschleife, wenn der Ersatz die Übereinstimmung enthält.
quelle
Ihre Lösung ist hier:
Übergeben Sie eine Variable an den regulären Ausdruck.
Das, was ich implementiert habe, besteht darin, den Wert aus einem Textfeld zu übernehmen, das Sie ersetzen möchten, und ein anderes ist das Textfeld "Ersetzen durch", den Wert aus dem Textfeld in einer Variablen abzurufen und die Variable auf RegExp zu setzen Funktion zum weiteren Ersetzen. In meinem Fall verwende ich Jquery. Sie können dies auch nur mit JavaScript tun.
JavaScript-Code:
Dieser Code befindet sich beim Onclick-Ereignis einer Schaltfläche. Sie können ihn in eine aufzurufende Funktion einfügen.
Jetzt können Sie eine Variable in der Ersetzungsfunktion übergeben.
quelle
Diese selbstaufrufende Funktion iteriert mithilfe eines Index über replaceerItems und ändert mit jedem Durchgang replaceerItems [index] global für die Zeichenfolge.
quelle
Keine dieser Antworten war mir klar. Ich fand schließlich eine gute Erklärung unter http://burnignorance.com/php-programming-tips/how-to-use-a-variable-in-replace-function-of-javascript/
Die einfache Antwort lautet:
Zum Beispiel:
quelle
var
. Auch wenn Sie passen\b
oder\1
es brechen würde.Für mehrere Ersetzungen ohne reguläre Ausdrücke habe ich Folgendes gewählt:
Der wichtige Teil der Lösung wurde hier gefunden
quelle