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?

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);

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


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]}`;

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`);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.