我一直在努力创建一个简单的bbcode解析器,当代码正确但它没有代码时我会不知道如何处理它。
这是我的代码:
function BBCodeHTML(text) {
//WEBSITE 1
code = '<iframe width="10" height="10" src="https://www.videoWebsite.com/video/$1"></iframe>';
text = text.replace(/\[videoTag\](.*?)\[\/videoTag\]/g, code);
return text;
//WEBSITE 2
code = '<iframe width="10" height="10" src="https://www.videoWebsite2.com/video/$1"></iframe>';
text = text.replace(/\[videoTag2\](.*?)\[\/videoTag2\]/g, code);
return text;
[...]
}
问题是,如果用户只是 [videoTag] [/ videoTag] , $ 1 的东西(我不知道如何调用它)是空的并且仍显示嵌入(没有任何视频)。
无论如何,我可以检查 $ 1 是否为空,如果不是,则用嵌入替换?
类似于“如果$ 1 =空{不做任何事情}其他{嵌入} ”
我尝试搜索答案,但 $ 1 空等等什么也没给我。
如果任何mod知道此问题的更好标题,请随时编辑。
答案 0 :(得分:1)
试试这个正则表达式:
var r = /\[tag\](?!\[\/tag\])(.*?)\[\/tag\]/g;
假设空格被认为是“空的”:
var r = /\[tag\](?! *\[\/tag\])(.*?)\[\/tag\]/g;
用法示例:
'[tag] [/tag][/tag][tag]content[/tag]'.replace(r, '<tag>$1</tag>');
// "[tag] [/tag][/tag]<tag>content</tag>"
正则表达式:
\[tag\] "[tag]"
(?! *\[\/tag\]) not followed by zero or more whitespaces and "[/tag]"
(.*?) any char, zero or more times
\[\/tag\] "[/tag]"