2010-01-08 4 views
3

Je dois vérifier les correspondances JS pour une chaîne générée dynamiquement.JavaScript RegExp modèle de chaîne

ie.

for(i=0; i< arr.length; i++) 
{ 
pattern_1="/part of "+arr[i]+" string!/i"; 

if(string.search(pattern_1) != -1) 
    arr_num[i]++; 

} 

Cependant, ce code ne fonctionne pas - je suppose en raison des guillemets. Comment puis-je faire cela?

Merci beaucoup.

+0

ce que vous essayez de faire correspondre? Vous avez raison cependant, si vous ne devez pas créer dynamiquement la regex, vous devrez utiliser new RegExp ("string"); –

Répondre

7

Le littéral /pattern/ fonctionne uniquement comme un littéral. Pas dans une chaîne.

Si vous souhaitez utiliser un modèle de chaîne pour créer une expression régulière, vous devez créer un nouvel objet RegExp:

var re = new RegExp(pattern_1) 

Et dans ce cas, vous omettrait les frontslashes enserrant (/). Ces deux lignes sont équivalentes:

var re = /abc/g; 
var re = new RegExp("abc", "g"); 
+0

Merci, cela résout le problème =) – Rohan

+0

@ Rohan, alors vous devriez accepter la réponse. Cliquez sur cette coche en dessous du nombre de votes. – Triptych

+0

Ahh, c'est fait. Je suis nouveau ici: D – Rohan

1

Le problème est que vous passez une chaîne à la fonction search il le traite comme une chaîne. Essayez d'utiliser un objet RegExp comme ceci:

myregexp = new RegExp("part of " + arr[i] + " string!", "i") 
if (string.search(myregexp) != -1) { 
    arr_num[i]++; 
} 
1

Essayez ceci:

// note you dont need those "/" and that "i" modifier is sent as second argument 
pattern_1= new RegExp("part of "+arr[i]+" string!", "i"); 
Questions connexes