2012-03-07 4 views
1

У меня есть рабочий пример здесь: http://jsfiddle.net/R7KuK/Javascript массив строк в регулярное выражение буквальные

Я попытался создать массив, содержащий полные регулярные выражения с регулярными выражениями разделителей и набором флагов, но объект RegExp анализирует данные строки в виде строки, а не как регулярные выражения.

var regex = "/wolves/i" 

против

var regex = /wolves/i 

Мой вопрос: Как преобразовать строку-е изд регулярное выражение в фактическое регулярное выражение?


UPDATE: Это не было, пока Felix King любезно объяснил мне, что

var array = ["/wolves/i", "/Duck/"]; 

может безопасно стать:

var array = [/wolves/i, /Duck/]; 
+2

Проверить http://stackoverflow.com/questions/ 4589587/javascript-regular-expression-string-to-regex-object и http://stackoverflow.com/questions/874709/converting-user-input-string-to-regular-expression – arunes

+6

Почему бы вам не создать массив как '[/ wolves/i,/Duck /]'? Почему вы вообще используете строки? Это кажется ненужным осложнением для меня. –

+0

@FelixKling: Я не знал, что это возможно, а не для использования котировок. – User2121315

ответ

3

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

var regexSplit = regex.split('/'); 
var realRegex = new RegExp(regexSplit[1], regexSplit[2]); 

Или лучше :

var regexMatch = regex.match(/^\/(.*)\/([^\/]*)$/); 
var realRegex = new RegExp(regexMatch[1], regexMatch[2]); 

Лучше, если ваше регулярное выражение содержит «/», первый из них не удастся. ;)

0

украденной из here:

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

var re = new RegExp("a|b", "i"); 
// same as 
var re = /a|b/i; 
+0

Если вы скопируете другой ответ дословно, не следует ли здесь закрывать этот вопрос как дубликат? –

+0

возможно, да .... – sweaver2112

Смежные вопросы