¿Cómo puedo reemplazar una coincidencia de subcadena de expresiones regulares en Javascript?

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

str.replace(regex, 1);

Eso reemplaza toda la cadena strcon 1. Quiero que reemplace la subcadena coincidente en lugar de toda la cadena. ¿Es esto posible en Javascript?

Dave
fuente

Respuestas:

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

O si está seguro de que no habrá otros dígitos en la cadena:

var str   = 'asd-0.testing';
var regex = /\d/;
str = str.replace(regex, "1");
console.log(str);
Amarghosh
fuente
1
o usando la función: 'asd-0.testing'.replace (/ (asd -) \ d (\. \ w +) /, function (mystring, arg1, arg2) {return arg1 +' mynumber '+ arg2})
Ivan Rave
1
¿Hay alguna respuesta en la que NO conozca la estructura de la expresión regular? aquí básicamente está creando una nueva expresión regular con dos coincidencias
Martin Massera
Es bueno saber que necesita llaves () alrededor de la parte que desea 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");
}

Editar: adaptación con respecto al comentario.


fuente
Quiero reemplazar la subcadena con '1', no toda la cadena con la subcadena
dave
24

Obtendría la pieza antes y después de lo que desea reemplazar y la pondría a ambos lados.

Me gusta:

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
fuente
5
+1 Personalmente, me gusta tener la colección de fósforos para hacer fracking.
eduncan911
Estoy de acuerdo, tener el juego combinado disponible es más legible en mi opinión.
Travis J
0

Creo que la forma más sencilla de lograr tu objetivo es esta:

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