Come posso sostituire una corrispondenza di sottostringa regex in Javascript?


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

str.replace(regex, 1);

Questo sostituisce l'intera stringa strcon 1. Voglio che sostituisca la sottostringa corrispondente invece dell'intera stringa. È possibile in Javascript?

Risposte:


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

O se sei sicuro che non ci saranno altre cifre nella stringa:

var str   = 'asd-0.testing';
var regex = /\d/;
str = str.replace(regex, "1");
console.log(str);

1
o utilizzando la funzione: 'asd-0.testing'.replace (/ (asd -) \ d (\. \ w +) /, function (mystring, arg1, arg2) {return arg1 +' mynumber '+ arg2})
Ivan Rave

1
c'è qualche risposta in cui NON conosci la struttura della regex? qui stai fondamentalmente creando una nuova regex con due corrispondenze
Martin Massera

È bello sapere che hai bisogno di parentesi graffe () intorno alla parte che desideri $ 1, $ 2 ecc.
Bas Slagter

57

utilizzando 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");
}

Modifica: adattamento per quanto riguarda il commento


Voglio sostituire la sottostringa con '1' non l'intera stringa con la sottostringa
dave

24

Vorrei prendere la parte prima e dopo quello che vuoi sostituire e metterli su entrambi i lati.

Piace:

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 mi piace avere la raccolta di partite con cui frackare.
eduncan911

Sono d'accordo, avere a disposizione il set abbinato è più leggibile secondo me.
Travis J

0

Penso che il modo più semplice per raggiungere il tuo obiettivo sia questo:

var str   = 'asd-0.testing';
var regex = /(asd-)(\d)(\.\w+)/;
var anyNumber = 1;
var res = str.replace(regex, `$1${anyNumber}$3`);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.