كيف يمكنني إصلاح خطأ "مجموعة غير صالحة" عند محاولة استخدام نمط REGEXP الخاص بـ "المحسّن" الخاص بـ Gruber في JavaScript؟
-
01-10-2019 - |
سؤال
أحاول دمج جون جروبر نمط regex الليبرالي المحسن الدقيق لمطابقة عناوين URL في أحد JavaScripts الخاص بي ، لكن مفتش WebKit (في Google Chrome 5.0.375.125 لـ MAC) يعطي خطأ في بناء جملة التعبير "مجموعة غير صالحة".
REGEXP الأصلي Gruber هو كما يلي:
(?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 الخاص بي مع regexp كما يلي (w/forward slashes backslash-escaped):
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 لا يدعم (?:
(لعنة جوجل لعدم فهرسة علامات الترقيم!) تجميع بناء الجملة؟ هل فاتني الهرب من شيء ما؟
المحلول
غاه ، كان المعدل الوضع (أي (?i)
) في بداية Regex!
مررت تعبيرات منتظمة., على وجه التحديد قائمة ما هو ليس مدعوم ، وكان هناك "Mode Modifier" ، الذي حددته بالفعل بعد الإغلاق المائل للأمام من Regex. لقد تمزقها كل شيء يبدو جيدًا.
لذا ، فإن regex javaScript الخاص بي هو الآن على النحو التالي:
/\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