Wie kann ich eine Regex-Teilzeichenfolge in Javascript ersetzen?


111
var str   = 'asd-0.testing';
var regex = /asd-(\d)\.\w+/;

str.replace(regex, 1);

Das ersetzt die gesamte Zeichenfolge strdurch 1. Ich möchte, dass es den übereinstimmenden Teilstring anstelle des gesamten Strings ersetzt. Ist das in Javascript möglich?

Antworten:


140
var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;
str = str.replace(regex, "$11$2");
console.log(str);

Oder wenn Sie sicher sind, dass die Zeichenfolge keine weiteren Ziffern enthält:

var str   = 'asd-0.testing';
var regex = /\d/;
str = str.replace(regex, "1");
console.log(str);

1
oder mit der Funktion: 'asd-0.testing'.replace (/ (asd -) \ d (\. \ w +) /, Funktion (mystring, arg1, arg2) {return arg1 +' mynumber '+ arg2})
— Ivan Rave

1
Gibt es eine Antwort, bei der Sie die Struktur des regulären Ausdrucks NICHT kennen? Hier erstellen Sie im Grunde eine neue Regex mit zwei Spielen
— Martin Massera

Es ist gut zu wissen, dass Sie geschweifte Klammern () um den gewünschten Teil als $ 1, $ 2 usw. benötigen.
— Bas Slagter

57

mit str.replace(regex, $1);:

var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;

if (str.match(regex)) {
    str = str.replace(regex, "$1" + "1" + "$2");
}

Edit: Anpassung bezüglich des Kommentars


Ich möchte den Teilstring durch '1' ersetzen, nicht den gesamten String durch den Teilstring
— Dave

24

Ich würde das Teil vor und nach dem, was Sie ersetzen möchten, bekommen und sie auf beide Seiten legen.

Mögen:

var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;

var matches = str.match(regex);

var result = matches[1] + "1" + matches[2];

// With ES6:
var result = `${matches[1]}1${matches[2]}`;

5
+1 Ich persönlich mag es, eine Sammlung von Streichhölzern zu haben, mit denen ich fracken kann.
— eduncan911

Ich bin damit einverstanden, dass der passende Satz meiner Meinung nach besser lesbar ist.
— Travis J

0

Ich denke, der einfachste Weg, um Ihr Ziel zu erreichen, ist folgender:

var str   = 'asd-0.testing';
var regex = /(asd-)(\d)(\.\w+)/;
var anyNumber = 1;
var res = str.replace(regex, `$1${anyNumber}$3`);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.