البحث عن أزواج 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] `، لأن الخط المائل يغلق النمط عادةً.