البديل هو المصطلح في التعبير العادي وهو في الواقع “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…)