0

这个

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

解析到这个(在 html 中)

<b>this text is bold[/b]<br><i>this text is [b]italic</i></b>

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

使用这个功能

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

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

4

1 回答 1

1
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,'<b>$1</b>');
    }
    while (input.search(i) !== -1) {
        input = input.replace(i,'<i>$1</i>');
    }
    return input.replace(/\n/ig, '<br>');
}

BB代码:

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

用法:

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

输出:

<b>x<b>y</b>z</b><br><b>this text is bold</b><br><i>this text is <b>italic</b></i>

演示

于 2013-06-05T02:26:25.733 回答