0

我正在尝试从给定的字符串中删除 BBCode(仅gsub与一些正则表达式一起使用)。

这是一个示例字符串:

The [b]quick[/b] brown [url=http://example.com]fox[/url] jumps over the lazy dog [img=http://example.com/lazy_dog.png]

我需要输出的是:

The quick brown fox jumps over the lazy dog

那么有什么办法呢?我找到了各种这样做的例子,但没有一个适用于我的用例。

我试过的一个:/\[(\w+)[^w]*?](.*?)\[\/\1]/

但这不会抓住结束[img]标签。

4

1 回答 1

4

这篇文章的目的是展示如何解释 BBCode 的差异,在保留内容的同时剥离 BBCode 标签时应该考虑到这一点

这只会删除此页面定义的 BB 代码标签。

不过,它可能会删除超出有效 BB 代码标签的内容。例如,这个 BBCode tester[b ]Bold[/b]没有加粗,所以在右边,这些标签应该单独留下。但将被下面的正则表达式删除。它还将清除明显的非BBCode,例如[\b][\b=something]

另一个例子是[url=http://example.com/ ][/url](注意空格)。根据 BBCode 解析器,这可能好也可能不好。下面的正则表达式忽略开始标记,但删除结束标记。

/\[\/?(?:b|u|i|s|size|color|center|quote|url|img|ul|ol|list|li|\*|code|table|tr|th|td|youtube|gvideo)(?:=[^\]\s]+)?\]/

[code]正则表达式也没有正确处理该标记,如本演示中所示。替换应该单独留[code]code标签之间。

BBCode 测试器允许[b][b][b]Text[/b][/b][/b]将其解析为Text粗体,但另一个将其解释为[b][b]Text[/b][/b]部分[b][b]Text加粗,其余部分不加粗。如果您允许嵌套标签,那么正则表达式不是一个好的选择。

于 2013-02-04T21:07:18.510 回答