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.