¿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?

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);

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.


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]}`;

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`);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.