2015-05-08 4 views
1

Я пытаюсь сделать свой обычный регулярный выражение с помощью параметров. Однако RegExp не работает, когда я использую переменные:Генерация динамического регулярного выражения в JavaScript

Ниже регулярное выражение работает правильно, где я ограничиваю свой ввод 7 символами.

var specialCharactersValidation = new RegExp(/^[a-zA-Z0-9]{7}$/); 

Но когда я делаю это родовое:

var characterCount = parseInt(attrs.limitCharacterCount); // Value is 7 and type is int 
console.log(characterCount); // Value is 7 
var specialCharactersValidation = new RegExp(/^[a-zA-Z0-9]{characterCount}$/); 

Это консоль для приведенного выше кода. Регулярное выражение не компилируется с количеством символов.

7 
requestShipmentDirectives.js:73 /^[a-zA-Z0-9]{characterCount}$/ false 

Это не работает. И ни делает ниже:

var characterCount = parseInt(attrs.limitCharacterCount); // Value is 7 and type is int 
console.log(characterCount); // Value is 7 
var specialCharactersValidation = new RegExp("/^[a-zA-Z0-9]{"+characterCount+"}$/"); 

Это консоль выше код:

7 
9requestShipmentDirectives.js:73 /\/^[a-zA-Z0-9]{7}$\// false 

RegExp компилирует, но никогда не работает.

Выходной сигнал всегда false.

Есть что-то не хватает?

ответ

2

Вы должны использовать RegExp без /.../, чтобы разрешить использование переменных в регулярном выражении, например .:

var specialCharactersValidation = new RegExp("^[a-zA-Z0-9]{" + characterCount + "}$"); 

И дважды экранировать специальные символы внутри.

От MDN:

Буквальное обозначение обеспечивает компиляцию регулярного выражения , когда выражение. Используйте литеральную запись, когда регулярное выражение останется постоянным. Например, если для построения регулярного выражения, используемого в цикле, используется , то регулярное выражение не будет перекомпилировано на каждой итерации.

+0

Большое спасибо. Это сработало :) var specialCharactersValidation = new RegExp ("^ [a-zA-Z0-9] {" + characterCount + "} $"); –

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