Sie können in JavaScript wie folgt zurückverweisen:
var str = "123 $test 123";
str = str.replace(/(\$)([a-z]+)/gi, "$2");
Dies würde (ziemlich dumm) "$ test" durch "test" ersetzen. Aber stellen Sie sich vor, ich möchte die resultierende Zeichenfolge von $ 2 an eine Funktion übergeben, die einen anderen Wert zurückgibt. Ich habe es versucht, aber anstatt den String "test" zu bekommen, bekomme ich "$ 2". Gibt es einen Weg, dies zu erreichen?
// Instead of getting "$2" passed into somefunc, I want "test"
// (i.e. the result of the regex)
str = str.replace(/(\$)([a-z]+)/gi, somefunc("$2"));
javascript
regex
backreference
Quano
quelle
quelle
$1
und$2
sind hier vom Benutzer ausgewählte Parameternamen (ausgewählt, um die Rückreferenzsymbole nachzuahmen); das - variierend! - Die Anzahl dieser Parameter entspricht der Anzahl der Erfassungsgruppen im regulären Ausdruck.Übergeben Sie eine Funktion als zweites Argument an
replace
:Diese Funktion gibt es laut mozilla.org seit Javascript 1.3 .
quelle
Mit ESNext ein ziemlicher Ersatz für Dummy-Links, aber nur um zu zeigen, wie es funktioniert:
quelle
Hinweis: In der vorherigen Antwort fehlte Code. Es ist jetzt behoben + Beispiel.
Ich brauchte etwas Flexibleres für einen Regex-Ersatz, um den Unicode in meinen eingehenden JSON-Daten zu dekodieren:
quelle
Wenn Sie eine variable Anzahl von Rückreferenzen haben würden, sind auch die Anzahl der Argumente (und die Stellen) variabel. Die MDN- Webdokumente beschreiben die folgende Syntax zum Trennen einer Funktion als Ersatzargument:
Nehmen Sie zum Beispiel diese regulären Ausdrücke:
Sie können hier keine 'Argumente'-Variable verwenden, da sie vom Typ
Arguments
und keine vom Typ ist undArray
daher keineslice()
Methode hat.quelle