Javascript: проблема создания объекта RegExp - PullRequest
0 голосов
/ 01 июля 2010

Я хочу использовать следующее регулярное выражение для проверки загрузки файла:

/^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*))+\.(ext)$/

Но я хочу иметь возможность указать фильтр ext.

Это правильно?

function validateFile(str, ext) {
    alert(str);
    var expr = new RegExp("/^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*))+\.(" + ext.toLowerCase() + ")$/");
    alert(expr);
    return expr.test(str);  
}

1 Ответ

1 голос
/ 01 июля 2010

Вам не нужно включать косые черты в начале и в конце, когда вы используете конструктор RegExp:

var expr = /foo/;

Эквивалентно:

var expr = new RegExp("foo");

Вам просто нужнопозаботьтесь о двойной экранирующей обратной косой черте (\) в строке шаблона, например:

var expr = /\\/;

Должно быть:

var expr = new RegExp("\\\\");

Это потому, что в строковом литерале обратная косая чертаиспользуется также для экранирования символов.

Редактировать: Эквивалент

var expr = /^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*))+\.(ext)$/;

Должно быть:

var expr = new RegExp("^(([a-zA-Z]:)|(\\\\{2}\\w+)\\$?)(\\\\(\\w[\\w ]*))+\\.("+
                      ext.toLowerCase + ")$");

Обратите внимание, что вы также можете использоватьфлаг без учета регистра, в буквальной записи как /foo/i, с конструктором RegExp: new RegExp("foo", "i").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...