Исправлено предупреждение о неправильном спуске JSLint в RegEx - PullRequest
2 голосов
/ 12 октября 2011

У меня есть следующий код в стороннем элементе управления jQuery с именем jquery.facebox.js , который JSLint не нравится. Это плохая ошибка спуска в RegEx.

Регулярные выражения для меня похожи на ромуланские, поэтому я не вижу, как исправить ошибку (то есть с помощью символа точки в RegEx):

var imageTypes = $.facebox.settings.imageTypes.join('|');
$.facebox.settings.imageTypesRegexp = new RegExp('\.(' + imageTypes + ')$', 'i');

Ответы [ 2 ]

9 голосов
/ 12 октября 2011

Добавьте секунду \ после '\. Это проблема строк, а не регулярное выражение: -)

Чтобы иметь \ в строке в Javascript (и многих других языках), вам необходимо его избежать, потому что он используется для escape-последовательностей (например, \n). Таким образом, чтобы получить \, вы должны поставить \\.

В регулярных выражениях \ используется для экранирования следующего символа, но это еще один экранирование (не связанный с экранированием "string"). Так что это \\.

Чтобы быть более понятным: вы хотите, чтобы ваша строка была "буквально" \.(something. Чтобы получить это, вам нужно экранировать \, поставив другой \ (иначе ваша строка будет .(, потому что \ будет экранировать ., поэтому он ничего не будет делать). Если вам любопытно, в регулярных выражениях . означает любой символ, но если вы хотите найти . (точку), вы должны его избежать и угадать, что вы используете? \: -)

Если однажды вам придется программировать на C #, в C # вы можете решить эту проблему, используя @"something". @ Disable escape "расширение" в строке. Так что @"\" это \

2 голосов
/ 19 августа 2012

Если вы определяете свой шаблон как объект Regex, используя / / в качестве вложений, двойное экранирование не требуется, поскольку оно никогда не является строкой.

...