我有一些JavaScript在Amazon链接中查找Amazon ASIN,例如
http://www.amazon.com/dp/B00137QS28
为此,我使用以下正则表达式:/([A-Z0-9]{10})
但是,我不希望它与匹配的艺术家链接相匹配:
http://www.amazon.com/Artist-Name/e/B000AQ1JZO
所以我需要排除斜杠前面有'/ e'和10个字符的字母数字代码的任何链接。我认为以下内容会这样做:(?<!/e)([A-Z0-9]{10})
,但事实证明负面的外观在JavaScript中不起作用。是对的吗?有没有另一种方法可以做到这一点?
非常感谢任何帮助!
作为旁注,请注意有很多亚马逊链接格式,这就是我想要黑名单而不是白名单的原因,例如,这些都是同一页:
http://www.amazon.com/gp/product/B00137QS28/
http://www.amazon.com/dp/B00137QS28
http://www.amazon.com/exec/obidos/ASIN/B00137QS28/
http://www.amazon.com/Product-Title-Goes-Here/dp/B00137QS28/
答案 0 :(得分:3)
在你的情况下,这样的表达式可以起作用:
/(?!\/e)..\/([A-Z0-9]{10})/
答案 1 :(得分:2)
([A-Z0-9]{10})
在输入的反方向上同样有效,所以你可以
答案 2 :(得分:0)
您需要使用前瞻来过滤/e/*
个。然后修剪每个匹配的前导/e/
。
var source; // the source you're matching against the RegExp
var matches = source.match(/(?!\/e)..\/[A-Z0-9]{10}/g) || [];
var ids = matches.map(function (match) {
return match.substr(3);
});