web-dev-qa-db-fra.com

JavaScript - Utiliser la variable dans la correspondance de chaîne

J'ai trouvé plusieurs questions similaires, mais cela ne m'a pas aidé. J'ai donc ce problème:

var xxx = "victoria";
var yyy = "i";
alert(xxx.match(yyy/g).length);

Je ne sais pas comment passer variable dans la commande de correspondance. S'il vous plaît aider. Merci.

76
mesnicka

Bien que la fonction match n'accepte pas les littéraux de chaîne en tant que modèles regex, vous pouvez utiliser le constructeur de l'objet RegExp et le transmettre à la fonction String.match:

var re = new RegExp(yyy, 'g');
xxx.match(re);

Tout indicateur dont vous avez besoin (tel que/g) peut aller dans le deuxième paramètre.

154
Chris Hutchinson

Par exemple:

let myString = "Hello World"
let myMatch = myString.match(/H.*/)
console.log(myMatch)

Ou

let myString = "Hello World"
let myVariable = "H"
let myReg = new RegExp(myVariable + ".*")
let myMatch = myString.match(myReg)
console.log(myMatch)
8
Driton Haxhiu

Vous devez utiliser objet RegExp si votre modèle est une chaîne

var xxx = "victoria";
var yyy = "i";
var rgxp = new RegExp(yyy, "g");
alert(xxx.match(rgxp).length);

Si le motif n'est pas une chaîne dynamique:

var xxx = "victoria";
var yyy = /i/g;
alert(xxx.match(yyy).length);
8
Anpher

Exemple. Pour trouver le nombre de voyelles dans la chaîne

var Word='Web Development Tutorial';
var vowels='[aeiou]'; 
var re = new RegExp(vowels, 'gi');
var arr = Word.match(re);
document.write(arr.length);
2

pour moi de toute façon, ça aide de le voir utilisé. vient de faire cela en utilisant l'exemple "re":

var analyte_data = 'sample-'+sample_id;
var storage_keys = $.jStorage.index();
var re = new RegExp( analyte_data,'g');  
for(i=0;i<storage_keys.length;i++) { 
    if(storage_keys[i].match(re)) {
        console.log(storage_keys[i]);
        var partnum = storage_keys[i].split('-')[2];
    }
}
0
geekbuntu