将图像复制到BBCode的问题

时间:2011-01-09 19:48:31

标签: javascript regex bbcode

我正在为自己的phpBB3做点什么,我正试图将这些笑容转换回oringinal笑脸状态,例如。

:)  :(  :O  :P

因为笑脸的HTML包含这个:

/<img src=".*" alt="(.*)" title=".*">/gi

取代:

$1

然而,当我有多个表情时,它只显示最后一个笑脸,例如如果它是这样的:

alt text http://uimgz.com/i/R2e3H8g5D8.png

它变成了这个:

:twisted:

右边的最后一个笑脸是什么,为什么它没有被取代并且返回了它应该返回的所有笑脸状态:

:) :o :twisted:

正则表达式看起来很好,但我不是什么问题,所有正则表达式都使用for()循环进行替换循环,这不是问题。

多个表情HTML:

<img src="./images/smilies/icon_e_smile.gif" alt=":)" title="Smile" /> <img src="./images/smilies/icon_e_surprised.gif" alt=":o" title="Surprised" /> <img src="./images/smilies/icon_twisted.gif" alt=":twisted:" title="Twisted Evil" />

2 个答案:

答案 0 :(得分:1)

将正则表达式更改为此,然后重试:

/<img src="[^"]*" alt="([^"]+)" title="[^"]*">/gi

正则表达式引擎通常是贪心的。它将尝试匹配匹配内容的最长文本。在你的情况下,我将所有三个链接匹配为一个。我在这里做的是限制src属性中的内容不包含“所以它不会匹配到第三个src的所有方式。 它将此视为src属性./images/smilies/icon_e_smile.gif" alt=":)" title="Smile" /> <img src="./images/smilies/icon_e_surprised.gif" alt=":o" title="Surprised" /> <img src="./images/smilies/icon_twisted.gif

答案 1 :(得分:1)

使用*?+?进行非贪婪匹配:

/<img src=".*?" alt="(.+?)" title=".*?">/gi

你失败的例子中发生的事情是第一个.*匹配所有这些:

./images/smilies/icon_e_smile.gif" alt=":)" title="Smile" /> <img src="./images/smilies/icon_e_surprised.gif" alt=":o" title="Surprised" /> <img src="./images/smilies/icon_twisted.gif

仍在产生有效的匹配,但它不是你想要的。 ? / *之后的+使正则表达式消耗了成功匹配所需的最小字符串。阅读“注意贪婪!”部分在this article

我还想添加一般警告,即正则表达式不是解析HTML的最佳工具。如果src属性具有转义",即使我的正则表达式也会中断。