دلالات واستخدام كائنات RegExp:
التحقق من تطابقات السلسلة، والحصول على جزء من المحتوى في السلسلة، وإنشاء سلسلة جديدة بناءً على السلسلة الأصلية (بما في ذلك الإضافة والحذف والتعديل)
هناك طريقتان رئيسيتان لإنشاء كائن RegExp:
استخدام الحرفي، مثل /w/g
استخدم مُنشئًا، مثل RegExp(/w/) الجديد
هناك عدة نقاط يجب ملاحظتها عند إنشاء كائنات RegExp:
غالبًا ما يتم استخدام الحرف الحرفي لإنشاء كائنات RegExp الثابتة التي لم يتم إنشاؤها بواسطة وقت التشغيل.
يمكن إضافة العلامات مباشرة بعد الحرفي للحد من نتائج تنفيذ السلاسل المطابقة، وتشمل العلامات شائعة الاستخدام g وi، والتي تستخدم لتمثيل المطابقة العامة (العالمية) والمطابقة غير الحساسة لحالة الأحرف (غير حساسة لحالة الأحرف) على التوالي.
توفر المعلمة الأولى لمنشئ RegExp نمط الكائن إذا كان النمط عبارة عن RegExp حرفيًا، فلا يمكن توفير المعلمة الثانية (أي تحديد العلامة). إذا كان النمط عبارة عن سلسلة، فيمكنك استخدام المعلمة الثانية
غالبًا ما يتم استخدام مُنشئ RegExp لإنشاء كائنات RegExp الديناميكية التي تم إنشاؤها بواسطة وقت التشغيل.
عندما يكون نمط RegExp عبارة عن سلسلة، يجب كتابة كل "" حرفيًا كـ "\"، لأن "" يجب أن يتم الهروب منه في السلسلة
وظائف متعلقة بكائن RegExp
كاذبة
:للتحقق من مطابقة سلسلة، يمكنك استخدام طريقة regExp.test(string)، التي تتحقق مما إذا كانت السلسلة تتطابق مع النمط الذي يوفره regExp. يمكنك أيضًا استخدام طريقة string.search(regExp)، والتي ستعيد -1 إذا لم يتطابق الاثنان.
للحصول على جزء من السلسلة، يمكنك استخدام طريقة regExp.exec(string)، أو يمكنك استخدام طريقة string.match(regExp) لإنشاء سلسلة جديدة على السلسلة الأصلية، وعادة ما تستخدم string.replace(searchValue،). طريقة استبدال القيمة).
يتم توفير دلالات النمط في كائن RegExp:
يمكن لـ RegExp تعريف بدائل متعددة مفصولة بـ "|". تتألف المصطلحات من أجزاء، وتنقسم إلى تأكيد (يستخدم للتأهيل الموضعي)، وذرة (وحدة مطابقة)، وذرة مع محدد كمي (معدل).
يتم تقسيم التأكيد إلى "^" الذي يُستخدم لمطابقة بداية السلسلة. في multiInput (أي عندما تحتوي العلامة على m)، يمكن أيضًا مطابقة بداية السطر "$" لمطابقة نهاية السلسلة. في multiInput (أي عندما تحتوي العلامة على m)، يمكن أيضًا أن تتطابق مع نهاية السطر "b" لمطابقة الفاصل الزمني w وW أي محتوى في السلسلة، ولكنه يُستخدم فقط لتحديد مطابقة الموضع.
حالة الذرة أكثر تعقيدًا، دعونا نلقي نظرة أولًا على المُحدِّد الكمي للذرة، والذي يمكن أن يتضمن * + ? {n} {m,} {m,n}، حيث * تعني أن الذرة يمكن أن تحتوي على 0 تكرار أو أكثر، + تعني 1 أو أكثر بالنسبة للتكرارات المذكورة أعلاه، ? يعني 0 أو 1 مرة، {n} يعني بالضبط n تكرار، {m,} يعني m أو أكثر من التكرار، {m,n} يعني أن عدد التكرارات يقع بين m وn (بما في ذلك m و n )، يمكن أيضًا أن يتبع المحدد الكمي أعلاه لبدء الوضع غير الجشع، وسأشرح معنى هذا الوضع لاحقًا.
تحتوي Atom على PatternCharacter (أحرف عادية، أي أحرف ليس لها دلالات خاصة في النمط، والتي سيتم مطابقتها حرفيًا)
"." يتطابق مع جميع الأحرف التي لا تحتوي على فاصل سطر
يحتوي AtomEscape على الرقم 1 الرقمي (يُستخدم للإشارة إلى المطابقة الناجحة بين القوسين السابقين). إشارات إلى بعض الأحرف n f r t v xNN uXXXX cX، وما إلى ذلك. بعض الأحرف ذات المعاني الخاصة، مثل d D s S w W
يحتوي CharacterClass على نموذجين: [...] و[^...]. يمكن أن يحتوي على العديد من الأحرف، مثل -، n ومراجع الأحرف الأخرى، b، d وأحرف أخرى ذات معنى خاص. لاحظ أنه إذا كانت هناك أحرف حول "-"، فإن الدلالات تتغير من حرف معين إلى حرف معين. إذا لم تكن هناك أحرف على يسار أو يمين "-"، فإن "-" يمثل حرف الشرطة فقط.
(المجموعة)، إذا قمت بإجراء التجميع في الوضع أعلاه، فيمكنك استخدام Quantifier لتعديله بعد المجموعة.
(?:group)، يتم استخدامها كمجموعة فقط، ولن يتم تسجيل المحتوى المطابق للمجموعة ولن يتم تضمينه في 1..n
(?=group)، يتطلب المطابقة ولكنه لا يتضمن المحتوى المطابق للمجموعة في سلسلة المطابقة التي تم إرجاعها
(؟!group)، لا يتطلب أي مطابقة ولن يتضمن المحتوى المطابق للمجموعة في سلسلة المطابقة التي تم إرجاعها. الآن أريد أن أتحدث عن وضعي التشغيل الأكثر أهمية في RegExp:
يكون البديل المطابق دائمًا من اليسار إلى اليمين لن تحاول المطابقة الأولى بعد ذلك إجراء المطابقات اللاحقة، مثل
/ab|abc/.exec("abc"). السلسلة أعلاه "abc" تتطابق فقط مع abc، ولن تتطابق مع abc
، فهي طبيعية دائمًا. إذا لم تتم إضافة ? بعد Quantifier، فسيتم استخدام الوضع الجشع بعد إضافة ?، سيتم استخدام الوضع غير الجشع. على سبيل المثال، عند
مطابقة /w+bc/.exec("abcbcbc")، سيتم استخدام w+
.قم دائمًا بمطابقة أكبر عدد ممكن من التطابقات أولاً (أي الوضع greedy )، لذلك ستطابق "abcbcbc". إذا تم تغييرها إلى
/w+?bc/.exec("abcbcbc")، فسوف تتطابق مع أقل عدد ممكن ( أي الوضع غير الجشع)، لذلك سيطابق "abc" فقط.
بالنسبة لمتطلبات تحليل السلسلة العامة، يمكنك بشكل عام استخدام طريقة exec أو match للتحليل. إذا كانت السلسلة كبيرة، فغالبًا ما تحتاج إلى استخدام بنية حلقة للتحليل، حيث يكون RegExp قويًا جدًا عند دمجه مع عبارات while وغيرها.
عندما تريد تحويل سلسلة موجودة إلى سلسلة أخرى عن طريق تعديلها، فإنك تستخدم دائمًا طريقة الاستبدال، وهذه الطريقة هي الطريقة الأكثر أهمية في RegExp في رأيي، مما يجعلها تحتوي على العديد من الأشكال احتياجات تعديل السلاسل.