A BBCode parser without any built-in parsing rules, allowing users to implement their own rules.
Usage
1. First of all, create parser
const parser = new BBCodeParser.BBCodeParser();
2. Implement and register parsing rules
A rule for [url=URL]CONTENT[/url]
and [url]URL_AS_CONTENT[/url]
can be registered like this:
parser.register({
'url': {
openTag(params, content) {
let url = params ?? content;
url = url.startsWith('http://') || url.startsWith('https://') ? url : 'http://' + url;
return `<a href="${ url }" target="_blank">`;
},
closeTag(params, content) {
return '</a>'
},
}
});
A rule for [b]CONTENT[/b]
can be registered like this:
parser.register({
'b': {
openTag(params, content) {
return '<b>';
},
closeTag(params, content) {
return '</b>';
},
},
});
And yes, they can be registered with one call:
parser.register({
'url': {
openTag(params, content) {
let url = params ?? content;
url = url.startsWith('http://') || url.startsWith('https://') ? url : 'http://' + url;
return `<a href="${ url }" target="_blank">`;
},
closeTag(params, content) {
return '</a>'
},
},
'b': {
openTag(params, content) {
return '<b>';
},
closeTag(params, content) {
return '</b>';
},
},
});
3. Parse bbcode (and get html if need)
const result = parser.parse('[b]Hello[/b], [url=https://example.com/]bbcode[/url]');
// You can access html or ast / nodes in result object, like
console.log(result.html);
console.log(result.html_ast);
console.log(result.ast);
// Check if there's any error while paring
console.log(result.errors);
4. Types
Please refer to JSDoc in source code.
(Sadly comments are written in Chinese)