为什么下面的JavaScript正则expression式不能工作?

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 

?=:积极的前瞻。 主expression式之后匹配一个组而不在结果中包含它。

你正在寻找一个积极的lookbehind,因为你正试图匹配你的主要expression式之前的东西,如果你只是想提取url

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

编辑:

他们不支持JavaScript(如注释所示),所以你不得不采取欺骗手段。

但是,如果您尝试提取URL,则可能更容易将其分成两步,获取整个匹配项,然后删除<img src=...部分。

你的第一个正则expression式不能匹配,因为它使用零宽度预读,与之后的模式相矛盾。

正则expression式不能匹配"<img src="并且在string中的相同位置也匹配例如"http://25"