الرجوع الي الدرس

البحث عن أزواج bbtag

تبدو علامة “bb-tag” مثل [tag] ... [/ tag] ، حيث tag هي واحدة من:b أو url أوquote.

على سبيل المثال:

[b]text[/b]
[url]http://google.com[/url]

يمكن أن تتداخل علامات BB. ولكن لا يمكن إدراج علامة في نفسها ، على سبيل المثال:

بشكل طبيعي:
[url] [b]http://google.com[/b] [/url]
[quote] [b]text[/b] [/quote]

لا يمكن حدوثه:
[b][b]text[/b][/b]

يمكن أن تحتوي العلامات على فواصل أسطر ، وهذا أمر طبيعي:

[quote]
  [b]text[/b]
[/quote]

قم بإنشاء التعبير العادي للعثور على جميع علامات BB مع محتوياتها. على سبيل المثال:

let regexp = /your regexp/flags;

let str = "..[url]http://google.com[/url]..";
alert( str.match(regexp) ); // [url]http://google.com[/url]

إذا كانت العلامات متداخلة ، فإننا نحتاج إلى العلامة الخارجية (إذا أردنا ، يمكننا متابعة البحث في محتواها):

let regexp = /your regexp/flags;

let str = "..[url][b]http://google.com[/b][/url]..";
alert( str.match(regexp) ); // [url][b]http://google.com[/b][/url]

علامة الفتح هي النمط: \ [(b | url | الاقتباس) \].

ثم للعثور على كل شيء حتى علامة الإغلاق – دعنا نستخدم النمط . *؟ مع العلامة s لمطابقة أي حرف بما في ذلك السطر الجديد ثم إضافة مرجع خلفي إلى علامة الإغلاق.

النمط الكامل: \ [(b | url | الاقتباس) \]. *؟ \ [/ \ 1 \].

بشكل عملي:

let regexp = /\[(b|url|quote)\].*?\[\/\1\]/gs;

let str = `
  [b]hello![/b]
  [quote]
    [url]http://google.com[/url]
  [/quote]
`;

alert( str.match(regexp) ); // [b]hello![/b],[quote][url]http://google.com[/url][/quote]

يرجى ملاحظة أنه بالإضافة إلى الهروب من نمط: [ و نقش:] ، كان علينا أن نهرب من شرطة مائلة لنموذج علامة الإغلاق: [\ / \ 1] `، لأن الخط المائل يغلق النمط عادةً.