Comment puis-je remplacer une correspondance de sous-chaîne regex en Javascript?

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

str.replace(regex, 1);

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

Dave
la source

Réponses:

140
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);
Amarghosh
la source
1
ou en utilisant la fonction: 'asd-0.testing'.replace (/ (asd -) \ d (\. \ w +) /, function (mystring, arg1, arg2) {return arg1 +' mynumber '+ arg2})
Ivan Rave
1
y a-t-il une réponse où vous ne connaissez pas la structure de l'expression régulière? ici, vous créez essentiellement une nouvelle regex avec deux matchs
Martin Massera
Il est bon de savoir que vous avez besoin d'accolades () autour de la partie que vous voulez comme 1 $, 2 $, etc.
Bas Slagter
57

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


la source
Je veux remplacer la sous-chaîne par '1' et non la chaîne entière par la sous
dave
24

J'obtiendrais la pièce avant et après ce que vous voulez remplacer et les placerais 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]}`;
Félix Saparelli
la source
5
+1 Personnellement, j'aime avoir la collection d'allumettes pour fracker.
eduncan911
Je suis d'accord, avoir le jeu assorti disponible est plus lisible à mon avis.
Travis J
0

Je pense que le moyen le plus simple d'atteindre votre objectif est le suivant:

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