Wie behebe ich „ungültige Gruppe“ Fehler beim Grubers „verbessert“ URL passende regexp Muster in JavaScript zu verwenden versuchen?
-
01-10-2019 - |
Frage
Ich versuche, John Grubers eine verbesserte Liberal, Accurate RegexMuster für Matching-URLs zu integrieren in einem meiner Javascripts, aber WebKit Inspektor (in Google Chrome 5.0.375.125 für Mac) gibt einen „Ungültige Gruppe“ regulären Ausdruck Syntaxfehler.
Grubers Original regexp ist wie folgt:
(?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`!()\[\]{};:'".,<>?«»“”‘’]))
Die Linie von meinem JavaScript w / die regexp ist wie folgt (w / Vorwärts-Schrägstriche Backslash geschützt):
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>');
Und die Google Chrome (? V8) Fehler ist wie folgt:
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
Und die Safari Fehler ist wie folgt:
SyntaxError: Invalid regular expression: unrecognized character after (?
Er behauptet, es in der modernen JavaScript regexp Dolmetscher arbeiten sollte, was ich davon ausgehen würde WebKit & V8 wäre. Does JavaScript ist regexp-Syntax nicht die (?:
unterstützen (verdammt Google für Interpunktion nicht indexiert!) Gruppierung Syntax? Habe ich gerade etwas vermissen zu entkommen?
Lösung
Gah, es war der Modus Modifikator (das heißt die (?i)
) am Anfang des Regex!
Ich ging durch Regular-Expressions.info des datails auf "JavaScript Regelmäßigen Ausdruck Flavor" , insbesondere die Liste von dem, was nicht unterstützt, und es war der ‚Modus-Modifikator‘, die ich bereits angegeben hatte nach der Schließung vor dem regulären Ausdruck zerschneiden. aus einem zerrissenen es scheint alles gut.
Also, meine JavaScript Regex ist nun wie folgt:
/\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