Trouver les paires de bbtag
Un “bb-tag” ressemble à [tag]...[/tag], où tag peut être : b, url ou quote.
Par exemple :
[b]text[/b]
[url]http://google.com[/url]
Les BB-tags peuvent être imbriqués. Mais un tag ne peut pas être imbriqué dans lui même, par exemple :
Normal:
[url] [b]http://google.com[/b] [/url]
[quote] [b]text[/b] [/quote]
Ne peut pas arriver:
[b][b]text[/b][/b]
Les tags peuvent contenir des sauts de ligne, c’est normal :
[quote]
[b]text[/b]
[/quote]
Créez une regexp pour trouver tous les BB-tags avec leur contenu.
Par exemple :
let regexp = /your regexp/flags;
let str = "..[url]http://google.com[/url]..";
alert( str.match(regexp) ); // [url]http://google.com[/url]
Si les tags sont imbriqués, alors nous voulons le tag extérieur (si nous voulons nous pouvons continuer la recherche dans le contenu) :
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]
Un tag d’ouverture est \[(b|url|quote)\].
Ensuite pour trouver tout jusqu’au tag de fermeture, utilisons le modèle .*? avec le flag s pour trouver n’importe quel caractère en plus des sauts de ligne, puis ajoutons une référence au tag de fermeture.
Le modèle complet : \[(b|url|quote)\].*?\[/\1].
En action :
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]
Veuillez noter qu’en plus d’échapper [, nous avons dû échapper une barre oblique pour la balise de fermeture [\/\1], car normalement la barre oblique ferme le modèle.