Jak mogę zamienić dopasowanie podciągów wyrażenia regularnego w JavaScript?


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

str.replace(regex, 1);

To zastępuje cały ciąg strz 1. Chcę, aby zastępował dopasowany podciąg zamiast całego ciągu. Czy to możliwe w Javascript?

Odpowiedzi:


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

Lub jeśli jesteś pewien, że w ciągu nie będzie żadnych innych cyfr:

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

1
lub używając funkcji: 'asd-0.testing'.replace (/ (asd -) \ d (\. \ w +) /, function (mystring, arg1, arg2) {return arg1 +' mynumber '+ arg2})
Ivan Rave

1
czy jest jakaś odpowiedź, w której NIE znasz struktury wyrażenia regularnego? tutaj w zasadzie tworzysz nowe wyrażenie regularne z dwoma dopasowaniami
Martin Massera

Dobrze jest wiedzieć, że trzeba klamrowych () wokół części, która ma być itd. $ 1, $ 2
Bas Slagter

57

używając 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");
}

Edycja: adaptacja dotycząca komentarza


Chcę zamienić podciąg na „1”, a nie cały ciąg na podciąg
dave

24

Dostałbym część przed i po tym, co chcesz wymienić i położyłem je po obu stronach.

Lubić:

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 Osobiście lubię mieć kolekcję zapałek do frackowania.
eduncan911

Zgadzam się, posiadanie dopasowanego zestawu jest moim zdaniem bardziej czytelne.
Travis J

0

Myślę, że najprostszym sposobem na osiągnięcie celu jest:

var str   = 'asd-0.testing';
var regex = /(asd-)(\d)(\.\w+)/;
var anyNumber = 1;
var res = str.replace(regex, `$1${anyNumber}$3`);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.