Как исправить ошибку «Неверную группу» при попытке использовать «Улучшенный» URL-URL «Улучшенный» URL-адрес REGEXP в JavaScript?
-
01-10-2019 - |
Вопрос
Я пытаюсь интегрировать Джона Грубера Улучшенный либеральный, точный рисунок регулятора для сопоставления URL В одну из моих Javascripts, но инспектор WebKit (в Google Chrome 5.0.375.125 для Mac) дает «Неверную группу» Ошибка синтаксиса регулярных выражений.
Оригинал Gruber Regexp выглядит следующим образом:
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))
Линия из моего JavaScript W / Regexp выглядит следующим образом (с Wired Clashes Backslash - сбежал):
tweet_text = tweet_text.replace(/(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi, '<a href="$1">$1</a>');
И ошибка Google Chrome (V8?) Выглядит следующим образом:
Uncaught SyntaxError: Invalid regular expression: /(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/: Invalid group
И ошибка Safari выглядит следующим образом:
SyntaxError: Invalid regular expression: unrecognized character after (?
Он утверждает, что он должен работать в современном JavaScript Regexp переводчикам, которые я бы предположил WebKit & V8. Синтаксис Regexp JavaScript не поддерживает (?:
(Черт, Google для не индексации пунктуации!) Группировка синтаксиса? Я просто скучал по поводу чего-то?
Решение
ГА, это было Модификатор режима (т.е. (?i)
) В начале Regex!
я прошел сквозь ДАБОЛЬШИЧНИКОВЫЕ ДАТЧИИ РЕГУЛИРОВАННЫХ ПРЕДОГРИДЕНТАХ на «Регулярное выражение явления JavaScript», конкретно список того, что нет Поддерживается, и был «модификатор режима», который я уже указывал после закрытия форвардной косые регеек. Разорвал это все кажется хорошо.
Итак, мой JavaScript Regex теперь следующим образом:
/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi