Encuentra la pareja bbtag
Un “bb-tag” se ve como [tag]...[/tag]
, donde tag
es uno de: b
, url
o quote
.
Por ejemplo:
[b]text[/b]
[url]http://google.com[/url]
BB-tags se puede anidar. Pero una etiqueta no se puede anidar en sí misma, por ejemplo:
Normal:
[url] [b]http://google.com[/b] [/url]
[quote] [b]text[/b] [/quote]
No puede suceder:
[b][b]text[/b][/b]
Las etiquetas pueden contener saltos de línea, eso es normal:
[quote]
[b]text[/b]
[/quote]
Cree una expresión regular para encontrar todas las BB-tags con su contenido.
Por ejemplo:
let regexp = /your regexp/flags;
let str = "..[url]http://google.com[/url]..";
alert( str.match(regexp) ); // [url]http://google.com[/url]
Si las etiquetas están anidadas, entonces necesitamos la etiqueta externa (si queremos podemos continuar la búsqueda en su contenido):
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]
La etiqueta de apertura es \[(b|url|quote)]
.
Luego, para encontrar todo hasta la etiqueta de cierre, usemos el patrón.*?
con la bandera s
para que coincida con cualquier carácter, incluida la nueva línea, y luego agreguemos una referencia inversa a la etiqueta de cierre.
El patrón completo: \[(b|url|quote)\].*?\[/\1]
.
En acción:
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]
Tenga en cuenta que además de escapar [
tuvimos que escapar de una barra para la etiqueta de cierre [\/\1]
, porque normalmente la barra cierra el patrón.