كيف يمكنني إصلاح خطأ "مجموعة غير صالحة" عند محاولة استخدام نمط REGEXP الخاص بـ "المحسّن" الخاص بـ Gruber في JavaScript؟

StackOverflow https://stackoverflow.com/questions/3559113

  •  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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top