البديل هو المصطلح في التعبير العادي وهو في الواقع “OR” بسيط.
في التعبير العادي ، يُشار إليه بحرف السطر العمودي |.
على سبيل المثال ، نحتاج إلى العثور على لغات البرمجة: HTML أو PHP أو Java أو JavaScript.
التعبير العادي المقابل: html | php | java (script)؟.
مثال للاستخدام:
let regexp = /html|php|css|java(script)?/gi;
let str = 'First HTML appeared, then CSS, then JavaScript';
alert(str.match(regexp)); // 'HTML', 'CSS', 'JavaScript'
لقد رأينا بالفعل شيئًا مشابهًا – الأقواس المربعة. تسمح بالاختيار بين عدة أحرف ، على سبيل المثال gr [ae] y يطابق gre أو grey.
Square brackets allow only characters or character classes. Alternation allows any expressions. A regexp A|B|C means one of expressions A, B or C.
على سبيل المثال:
gr (a | e) yيعني تمامًا مثلgr [ae] y.gra | eyتعنيgraأوey.
لتطبيق التناوب على جزء مختار من النمط ، يمكننا تضمينه بين قوسين:
النمط: أحب HTML | CSSيطابقمطابقة: أنا أحب HTMLأوتطابق: CSS.I love (HTML | CSS)يتطابق معI love HTMLأوI love CSS.
مثال: regexp للوقت
In previous articles there was a task to build a regexp for searching time in the form hh:mm, for instance 12:00. But a simple \d\d:\d\d is too vague. It accepts 25:99 as the time (as 99 minutes match the pattern, but that time is invalid).
كيف يمكننا صنع نمط أفضل؟
يمكننا استخدام مطابقة أكثر دقة. اولا الساعات:
- إذا كان الرقم الأول هو “0” أو “1” ، فيمكن أن يكون الرقم التالي أي:
[01] \ d. - وإلا ، إذا كان الرقم الأول هو “2” ، فيجب أن يكون الرقم التالي "pattern: [0-3]`.
- (غير مسموح بالرقم الأول الآخر)
يمكننا كتابة كلا المتغيرين في regexp باستخدام البديل: [01] \ d | 2 [0-3].
بعد ذلك ، يجب أن تكون الدقائق من 00 إلى59. في لغة التعبير العادي التي يمكن كتابتها كـ [0-5] \ d: الرقم الأول0-5 ، ثم أي رقم.
If we glue hours and minutes together, we get the pattern: [01]\d|2[0-3]:[0-5]\d.
لقد انتهينا تقريبًا ، ولكن هناك مشكلة. يحدث “النمط البديل”: | الآن بين النمط: [01] \ dو "النمط: 2 [0-3]: [0-5] \ d.
أي: تمت إضافة الدقائق إلى البديل الثاني ، إليك صورة واضحة:
[01] \ d | 2 [0-3]: [0-5] \ د
يبحث هذا النمط عن النمط: [01] \ d أوالنمط: 2 [0-3]: [0-5] \ d.
ولكن هذا خطأ ، يجب استخدام التناوب فقط في جزء “الساعات” من التعبير العادي ، للسماح بـ "pattern: [01] \ dOR pattern: 2 [0-3] . دعنا نصحح ذلك عن طريق وضع "ساعات" بين قوسين:النمط: ([01] \ d | 2 [0-3]): [0-5] \ d`.
الحل النهائي:
let regexp = /([01]\d|2[0-3]):[0-5]\d/g;
alert('00:00 10:10 23:59 25:99 1:2'.match(regexp)); // 00:00,10:10,23:59
التعليقات
<code>، وللكثير من السطور استخدم<pre>، ولأكثر من 10 سطور استخدم (plnkr, JSBin, codepen…)