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