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.