Як я можу замінити збіг підрядок регулярних виразів у 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 +) /, функція (mystring, arg1, arg2) {return arg1 +' mynumber '+ arg2})
Іван Рейв

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

Добре знати, що вам потрібні брекети () навколо тієї частини, яку ви хочете, як $ 1, $ 2 і т.д.
Bas Slagter

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.