2010-01-08 3 views
3

Мне нужно проверить совпадения JS для динамически генерируемой строки.Javascript RegExp string pattern

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]++; 

} 

Однако этот код не работает - я полагаю, что это связано с кавычками. Как мне это сделать?

Большое спасибо.

+0

что вы пытаетесь соответствовать? Вы правы, хотя, если вы хотите динамически создавать регулярное выражение, вам нужно будет использовать новый 'RegExp (« string »);'. –

ответ

7

/pattern/ буквально работает только как, ну, буквально. Не внутри строки.

Если вы хотите использовать строку шаблон для создания регулярного выражения, необходимо создать новый объект RegExp:

var re = new RegExp(pattern_1) 

И в этом случае, вы бы опустить ограждающие frontslashes (/). Эти две строки эквивалентны:

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

Спасибо, что решает проблему =) – Rohan

+0

@Rohan, тогда вы должны принять ответ. Нажмите эту галочку ниже количества голосов. – Triptych

+0

Ahh, сделано. Я новичок здесь: D – Rohan

1

Проблема заключается в том, что вы передаете строку в функции search так он рассматривает его как строку. Попробуйте использовать объект RegExp так:

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

Попробуйте это:

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