143 votes

Comment remplacer une correspondance de sous-chaîne d'une expression rationnelle en Javascript ?

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

str.replace(regex, 1);

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

162voto

Amarghosh Points 33957
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);

62voto

RC. Points 18567

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

31voto

Félix Saparelli Points 3130

Je prendrais la pièce avant et après ce que vous voulez remplacer et je les mettrais 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]}`;

6voto

Lantanios Points 21

Je pense que la manière la plus simple d'atteindre votre objectif est la suivante :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X