web-dev-qa-db-fra.com

Comment remplacer une correspondance de sous-chaîne d'expression régulière en Javascript?

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

str.replace(regex, 1);

Cela remplace la chaîne entière str par 1. Je veux qu'il remplace la sous-chaîne correspondante au lieu de la chaîne entière. Est-ce possible en Javascript?

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

Ou si vous êtes sûr qu'il n'y aura pas d'autres chiffres dans la chaîne:

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

en utilisant 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: adaptation concernant le commentaire

54
user180100

Je voudrais obtenir la partie avant et après ce que vous voulez remplacer et les mettre de chaque côté.

Comme:

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]}`;
24
Félix Saparelli