Ответ 1
Вы можете использовать конструктор try/catch
и RegExp
:
var isValid = true;
try {
new RegExp("the_regex_to_test_goes_here");
} catch(e) {
isValid = false;
}
if(!isValid) alert("Invalid regular expression");
Как вы проверяете в JavaScript, является ли строка правильным регулярным выражением, которое будет компилироваться?
Например, когда вы выполняете следующий javascript, он выдает ошибку.
var regex = new RegExp('abc ([a-z]+) ([a-z]+))');
// produces:
// Uncaught SyntaxError: Invalid regular expression: /abc ([a-z]+) ([a-z]+))/: Unmatched ')'
Как определить, будет ли строка действительным регулярным выражением или нет?
Вы можете использовать конструктор try/catch
и RegExp
:
var isValid = true;
try {
new RegExp("the_regex_to_test_goes_here");
} catch(e) {
isValid = false;
}
if(!isValid) alert("Invalid regular expression");
Вот небольшая функция, которая проверяет правильность обоих типов регулярных выражений, строк или паттернов:
function validateRegex(pattern) {
var parts = pattern.split('/'),
regex = pattern,
options = "";
if (parts.length > 1) {
regex = parts[1];
options = parts[2];
}
try {
new RegExp(regex, options);
return true;
}
catch(e) {
return false;
}
}
Пользователь сможет тестировать как test
, так и /test/g
, например. Здесь - рабочая скрипка.
function isRegExp(regExp){
try {
new RegExp(regExp);
} catch(e) {
return false
}
return true
}
ex:
isRegExp(/@(\w+)/g) = true