【问题标题】:Javascript replace first and last font tagJavascript替换第一个和最后一个字体标签
【发布时间】:2015-01-25 23:43:18
【问题描述】:

我正在尝试将 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]

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

【问题讨论】:

  • 我能问一下你想要完成什么吗?你的代码看起来不必要的复杂
  • 当前的正则表达式只寻找颜色,修改和重复大小。为什么&lt;font&gt;标签?它们已被弃用
  • charlietfl,不幸的是它没有帮助。因为这是一个例子,有时是第一个“尺寸”,有时是“颜色”。 &lt;font&gt; 不是我的选择。

标签: javascript regex parsing


【解决方案1】:

您将很难使用正则表达式解析 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() 将所有内容重新加入。

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

【讨论】:

    【解决方案2】:

    使用负前瞻:

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

    解释这里发生了什么:我使用的模式完全是你的,除了附加的(?!\&lt;\/font\&gt;)。这种所谓的否定前瞻基本上是说:“只做这个匹配,如果我没有遇到&lt;/font&gt;下一个”。

    【讨论】:

    • 非常感谢!正是我想要的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多