为什么以下JavaScript正则表达式不起作用?

时间:2013-03-26 15:19:18

标签: javascript regex node.js regex-lookarounds

s='<img src="http://25.media.tumblr.com/xxxxx/tumblr_xxx_1280.jpg">'
p=/(?=<img src=")http:\/\/\d*\.media\.tumblr\.com\/\w*\/?tumblr_\w*_\d{3,4}\.\w{3,3}(?=")/g
s.match(p) # return null

但是,以下工作:

p=/(<img src=")http:\/\/\d*\.media\.tumblr\.com\/\w*\/?tumblr_\w*_\d{3,4}\.\w{3,3}(?=")/g

2 个答案:

答案 0 :(得分:2)

  

?=:前瞻性。在主表达式之后匹配组   不包括在结果中。

如果您尝试仅提取网址,那么您正在寻找一个积极的外观,因为您正在尝试匹配之前您的主要表达方式。

p=/(?<=img src=....
     ^ positive look-behind

修改

JavaScript不支持它们(如评论所示),因此您必须诉诸trickery

但是,如果您尝试提取网址,则可能更容易将其拆分为两步,获得整个匹配,然后移除<img src=...部分。

答案 1 :(得分:0)

您的第一个正则表达式无法匹配,因为它使用的零宽度前瞻与其后面的模式相矛盾。

正则表达式无法与"<img src="匹配,并且字符串中的相同位置也匹配,例如"http://25"