Как я могу заменить совпадение подстроки регулярного выражения в Javascript?


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

str.replace(regex, 1);

Это заменяет всю строку strна 1. Я хочу, чтобы он заменил совпавшую подстроку вместо всей строки. Возможно ли это в Javascript?

Ответы:


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

Или, если вы уверены, что в строке не будет других цифр:

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

1
или используя функцию: 'asd-0.testing'.replace (/ (asd -) \ d (\. \ w +) /, function (mystring, arg1, arg2) {return arg1 +' mynumber '+ arg2})
Иван Rave

1
есть ли ответ, где вы НЕ знаете структуру регулярного выражения? здесь вы в основном создаете новое регулярное выражение с двумя совпадениями
Мартин Массера

Приятно знать, что вам нужны фигурные скобки () вокруг той части, которую вы хотите, как 1 доллар, 2 доллара и т. Д.
Бас

57

используя 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");
}

Изменить: адаптация относительно комментария


Я хочу заменить подстроку на '1', а не всю строку с подстрокой,
Дэйв

24

Я бы получил деталь до и после того, что вы хотите заменить, и поставил бы их с обеих сторон.

Подобно:

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 Мне лично нравится иметь коллекцию спичек, с которой можно драться.
eduncan911

Я согласен, на мой взгляд, наличие согласованного набора более читабельно.
Travis J

0

Я думаю, что самый простой способ достичь своей цели - это:

var str   = 'asd-0.testing';
var regex = /(asd-)(\d)(\.\w+)/;
var anyNumber = 1;
var res = str.replace(regex, `$1${anyNumber}$3`);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.