如何用正则表达式匹配Amazon URL中seller=后至&前的卖家ID?
从Amazon URL中提取卖家ID(匹配至&符号停止)
你的核心问题是当前正则的.*属于贪婪匹配,会一直匹配到URL末尾,无法在第一个&处停止。这里提供两种可靠的解决方法:
方法一:使用排除型字符集(推荐)
直接匹配除&之外的所有字符,这种方式既精准又能兼容seller是URL最后一个参数的情况:
var regex = /seller=([^&]*)/; // 示例1:带多个参数的Amazon URL var url1 = 'https://www.amazon.com/sp?ie=UTF8&seller=A3AQP8TDYVYCGL&asin=B0714K41PB&ref_=dp_merchant_link&isAmazonFulfilled=1&tag=odeo'; var sellerId1 = url1.match(regex)[1]; // 输出:A3AQP8TDYVYCGL // 示例2:seller为最后一个参数的URL var url2 = 'http://www.youtube.com/watch?seller=Ahg6qcgoay4'; var sellerId2 = url2.match(regex)[1]; // 输出:Ahg6qcgoay4
[^&]:表示匹配任意**不是&**的单个字符*:表示匹配零个或多个上述字符,直到遇到&或者URL结尾
方法二:使用非贪婪匹配
将贪婪的.*改成非贪婪的.*?,让正则匹配到第一个&就停止:
var regex = /seller=(.*?)&/; var url = 'https://www.amazon.com/sp?ie=UTF8&seller=A3AQP8TDYVYCGL&asin=B0714K41PB&ref_=dp_merchant_link&isAmazonFulfilled=1&tag=odeo'; var sellerId = url.match(regex)[1]; // 输出:A3AQP8TDYVYCGL
注意:这种方式仅适用于seller不是URL最后一个参数的场景,如果seller后面没有&,正则会匹配失败。
你之前误以为
$&能实现停止匹配,其实$&是正则替换中的特殊变量,代表整个匹配的内容,和匹配停止逻辑无关。
内容的提问来源于stack exchange,提问作者David-Dj Bryant
相关产品推荐
相关产品推荐

