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
答案 0 :(得分:2)
?=:前瞻性。在主表达式之后匹配组 不包括在结果中。
如果您尝试仅提取网址,那么您正在寻找一个积极的外观,因为您正在尝试匹配之前您的主要表达方式。
p=/(?<=img src=....
^ positive look-behind
修改强>
JavaScript不支持它们(如评论所示),因此您必须诉诸trickery。
但是,如果您尝试提取网址,则可能更容易将其拆分为两步,获得整个匹配,然后移除<img src=...
部分。
答案 1 :(得分:0)
您的第一个正则表达式无法匹配,因为它使用的零宽度前瞻与其后面的模式相矛盾。
正则表达式无法与"<img src="
匹配,并且字符串中的相同位置也匹配,例如"http://25"
。