Javascript 替换第一个和最后一个字体标签

Javascript replace first and last font tag

我正在尝试将 html 转换为 bbcode。

我的代码:

var html = "<font color=\"Green\"><font size=\"4\">test</font></font>"

html = html.replace(/\<font color="(.*?)"\>(.*?)\<\/font\>/ig, "[color=][/color]");

结果:

[color=Green]<font size="4">test[/color]</font>

但我需要再买一个

[color=Green]<font size="4">test</font>[/color]

请你纠正我的错误。对不起我的英语。

使用否定前瞻:

html = html.replace(/\<font color="(.*?)"\>(.*?)\<\/font\>(?!\<\/font\>)/ig, "[color=][/color]");

解释一下这里发生了什么:除了附加的 (?!\<\/font\>),我使用的模式完全是你的。这种所谓的负前瞻基本上是说:"only make this a match, if I don't encounter </font> next".

您将很难用正则表达式解析 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() 将所有内容连接回去。

但同样,这只适用于简单的情况。