Подтвердить что ты не робот

Как проверить, является ли входная строка допустимым регулярным выражением?

Как вы проверяете в JavaScript, является ли строка правильным регулярным выражением, которое будет компилироваться?

Например, когда вы выполняете следующий javascript, он выдает ошибку.

var regex = new RegExp('abc ([a-z]+) ([a-z]+))');
// produces:
// Uncaught SyntaxError: Invalid regular expression: /abc ([a-z]+) ([a-z]+))/: Unmatched ')'

Как определить, будет ли строка действительным регулярным выражением или нет?

4b9b3361

Ответ 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");

Ответ 2

Вот небольшая функция, которая проверяет правильность обоих типов регулярных выражений, строк или паттернов:

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, например. Здесь - рабочая скрипка.

Ответ 3

function isRegExp(regExp){
          try {
                new RegExp(regExp);
              } catch(e) {
                return false
              }
         return true
    }

ex:
isRegExp(/@(\w+)/g) = true