Como posso substituir uma correspondência de substring regex em Javascript?

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

str.replace(regex, 1);

Isso substitui toda a string strpor 1. Eu quero substituir a substring correspondente em vez de toda a string. Isso é possível em Javascript?

Dave
fonte

Respostas:

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

Ou se você tiver certeza de que não haverá nenhum outro dígito na string:

var str   = 'asd-0.testing';
var regex = /\d/;
str = str.replace(regex, "1");
console.log(str);
Amarghosh
fonte
1
ou usando a função: 'asd-0.testing'.replace (/ (asd -) \ d (\. \ w +) /, function (mystring, arg1, arg2) {return arg1 +' mynumber '+ arg2})
Ivan Rave de
1
existe alguma resposta onde você NÃO conhece a estrutura do regex? aqui você está basicamente criando uma nova regex com duas correspondências
Martin Massera
É bom saber que você precisa de colchetes () ao redor da peça que você deseja como $ 1, $ 2 etc.
Bas Slagter
57

usando 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: adaptação em relação ao comentário


fonte
Quero substituir a substring por '1', não a string inteira pela substring
dave
24

Eu pegaria a peça antes e depois do que você deseja substituir e colocaria os dois lados.

Gostar:

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
fonte
5
1 Eu, pessoalmente, gosto de ter a coleção de fósforos para brincar.
eduncan911
Eu concordo, ter o conjunto compatível disponível é mais legível na minha opinião.
Travis J
0

Acho que a maneira mais simples de atingir seu objetivo é esta:

var str   = 'asd-0.testing';
var regex = /(asd-)(\d)(\.\w+)/;
var anyNumber = 1;
var res = str.replace(regex, `$1${anyNumber}$3`);
Lantanios
fonte