关于javascript:尝试从字符串中解析bbcode,当我有嵌套标签时我遇到了麻烦

Trying to parse bbcode out of a string and I'm running into trouble when I have nested tags

这个

1
2
[b]this text is bold[/b]
[i]this text is [b]italic[/b][/i]

解析到这个(在 html 中)

1
this text is bold[/b]this text is [b]italic

此文字为粗体[/b]此文字为[b]斜体

使用这个功能

1
2
3
4
5
function bbcode(input){
return input
.replace(/\\[b\\]([^]*)\\[\\/b\\]/ig, '$1')
.replace(/\\[i\\]([^]*)\\[\\/i\\]/ig, '$1');
}

我认为查找每组标签的正则表达式肯定存在问题,但似乎只解析了第一个粗体标签和最后一个粗体结束标签。知道如何解决这个问题吗?


1
2
3
4
5
6
7
8
9
10
11
12
function bbcode(input){
    var b = /\\[b\\]([^[]*(?:\\[(?!b\\]|\\/b\\])[^[]*)*)\\[\\/b\\]/ig;
    var i = /\\[i\\]([^[]*(?:\\[(?!i\\]|\\/i\\])[^[]*)*)\\[\\/i\\]/ig;
    while (input.search(b) !== -1) {
        input = input.replace(b,'$1');
    }
    while (input.search(i) !== -1) {
        input = input.replace(i,'$1');
    }
    return input.replace(/\
/ig, '');
}

BB代码:

1
2
3
[b]x[b]y[/b]z[/b]
[b]this text is bold[/b]
[i]this text is [b]italic[/b][/i]

用法:

1
2
3
4
var string = '[b]x[b]y[/b]z[/b]\
[b]this text is bold[/b]\
[i]this text is [b]italic[/b][/i]'
;
console.log(bbcode(string));

输出:

1
xyzthis text is boldthis text is italic

见演示。