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 |
见演示。