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?

Dave
quelle

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);
Amarghosh
quelle
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


quelle
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]}`;
Félix Saparelli
quelle
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`);
Lantanios
quelle