2010-07-05 2 views
0

Comment puis-je utiliser les chaînes comme «trouver» dans une regex JS?Expression rationnelle JavaScript utilisant des chaînes?

i.e. .:

var find = ["a", "b", "c"]; 
var string = "abcdefghijkl"; 

Maintenant, je veux remplacer tous les éléments du tableau trouver, avec une chaîne vide (" "), en utilisant des expressions régulières. Comment puis-je faire ceci? Je veux dire, en utilisant .replace(/find[i]/g, "") dans une boucle ne fonctionnerait pas.

Alors, comment puis-je le faire?

Merci!

Répondre

3

Vous pouvez créer une regex dynamiquement avec l'objet RegExp intégré.

var find = ["a", "b", "c"]; 
var re = new RegExp(find.join("|"), "g"); // <- /a|b|c/g 
var string = "abcdefghijkl"; 

string = string.replace(re, ""); 

alert(string); // <- defghijkl 
​ 
+0

ne pas besoin d'utiliser l'emballage parens ici - juste 'RegExp (find.join ("|"))' fonctionnera bien. –

+0

ouais je sais, merci :) juste tapé trop vite – galambalazs

+1

Bien que cela fonctionne pour ces contenus de tableau simplifié, il y aura des bogues si l'élément contient des caractères regex sans leur échapper. –

0

Pourquoi ne t vous utilisez juste

.replace(find[i], "*") 
+0

Cela ne fonctionne que pour la première occurrence. – Rohan

0

Si vous devez exécuter les expressions une à la fois (pour exampe si elles sont trop complexes pour que concatentate dans une expression de flambage), vous créer des objets Regexp dans une boucle comme ceci:

var find = ["a", "b", "c"]; 
var string = "abcdefghijkl"; 

for (var i = 0; i < find.length; i++) { 
    var re = new Regexp(find[i], "g"); 
    string = string.replace(re, ""); 
} 
Questions connexes