使用regEx匹配图像标记

时间:2009-05-06 19:54:43

标签: javascript regex replace

我对这个正则表达式有点麻烦:

<img(.+)src="_image/([0-9]*)/(.+)/> 

全局和不区分大小写的标志已启用。

问题在于它还会抓取Image n(请参阅下面的字符串),但我希望它只匹配字符串中的图像标记。

<p>Image 1:<img width="199" src="_image/12/label" alt=""/> Image 2: <img width="199" src="_image/12/label" alt=""/><img width="199" src="_image/12/label" alt=""/></p>

如果我在图像n之前放置一个换行符,它可以工作:)

有人能指出我做错了吗?

提前致谢 鲍勃

5 个答案:

答案 0 :(得分:1)

使用非贪婪的正则表达式:

&lt; img。? SRC =“_图像/(\ d +)/ / &GT(+。);?

答案 1 :(得分:1)

如果我正确解释你的正则表达式,看起来你是在第一组中的目录名和第二组中的文件路径之后?

<IMG.*?SRC="/_image/(\d+?)/([^"]*?)".*?/>

不要忘记使用正则表达式选项CaseInsensitive包装正则表达式(?i:[regex])

在第二组中,你正在解析所有不是结束的东西“,现在你正在寻找所有角色,事实上,你不需要搜索所有角色,你想要的一切都不是字符串上的结束语。

此外,不要忘记关闭您丢失的SRC字符串,并且SRC属性可能不是标记中的最后一个 - 例如边框,宽度,高度等。此外,可能有任何数字关闭最后一个属性和标记结束后的空格/&gt;

从这个正则表达式,你的第一个匹配组将保存子目录名称,第二个匹配组将保存子目录的/后面的所有内容 - 包括嵌套的子目录。如果你有嵌套的子目录,你可能需要稍微扩展一下:

<IMG.*?SRC="/_image/((\d+?)/)+?([^"]*?)".*?/>

在这种情况下,每个前导组将保存每个嵌套目录名称,最后一个组将保存文件名。

答案 2 :(得分:0)

你试过懒惰的评价吗?当我尝试类似的东西时,这种情况有所恢复。

答案 3 :(得分:0)

正则表达式在解析HTML方面根本不好(请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex?了解原因)。你需要的是一个HTML解析器。有关使用各种解析器的示例,请参阅Can you provide an example of parsing HTML with your favorite parser?

答案 4 :(得分:0)

你正在使用贪心量词(+)而没有太多限制。一个贪婪的量词正在告诉正则表达式引擎:“抓住每个符合资格的角色,并且只能退出足以完成正则表达式。”这意味着它将从字符“image / nnnnnn / 某些 /”的第一个序列中获取。