我正在尝试将html转换为bbcode。
我的代码:
var html = "<font color=\"Green\"><font size=\"4\">test</font></font>"
html = html.replace(/\<font color="(.*?)"\>(.*?)\<\/font\>/ig, "[color=$1]$2[/color]");
结果:
[color=Green]<font size="4">test[/color]</font>
但我需要另外
[color=Green]<font size="4">test</font>[/color]
请你纠正我的错误。抱歉我的英文。
答案 0 :(得分:0)
你将很难用正则表达式解析html,你可以从这个网站上的很多帖子中看到它。 Html不是常规语言,因此无法以这种方式解析。话虽这么说,如果问题很简单就应该是可能的。
这是一个可以在非常简单案例中使用的解决方案,以获得第一个和最后一个部分
var html = "<font color=\"Green\"><font size=\"4\">test</font></font>"
,findTag = /<.*?>|([^<]+)/g
,part
,allParts = []
;
while((part = findTag.exec(html)) !== null) {
allParts.push(part[0]);
}
console.log(allParts)
var first = allParts[0]
,last = allParts.slice(-1)[0]
;
console.log(first, last);
然后您可以像之前那样解析第一个和最后一个,然后使用array.join()
加入所有内容。
但同样,这只会在简单的情况下起作用。
答案 1 :(得分:-1)
使用否定前瞻:
html = html.replace(/\<font color="(.*?)"\>(.*?)\<\/font\>(?!\<\/font\>)/ig, "[color=$1]$2[/color]");
要解释这里发生了什么:我使用的模式完全属于你,除了附加的(?!\<\/font\>)
。这种所谓的负向前瞻基本上是这样说:“如果我没有遇到</font>
下一个,那么只会让这个匹配”。