javascript - 完美的亚马逊链接正则表达式

标签 javascript regex

我正在尝试构建用于 javascript 的完美亚马逊链接正则表达式。这是我目前所拥有的:

var reg = /https?:\/\/(www|smile)\.amazon\.com\/(?:(?:[\w-]+\/)?(?:dp|gp\/product)\/(\w{10})\/)?/;

我希望它能完整匹配以下所有网址:

http://smile.amazon.com/dp/B0005ZH4QI/?tag=menasheh02-20&psc=1&smid=ATVPDKIKX0DER
http://www.amazon.com/gp/family/signup/info/?ie=UTF8&camp=1789&creative=9325&linkCode=ur2&ref_type=generic&refcust=5FNWKEJKP63HFBSY6JGLXL4XIQ&tag=menasheh02-20&linkId=HR76ZTGJKWO5ED2N
http://www.amazon.com/gp/redirect.html?ie=UTF8&location=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fsubscribe-and-save%2Fmanager%2Fviewsubscriptions%3Fie%3DUTF8%26ref_%3Dya%255FT15%255F33&tag=menasheh02-20&linkCode=ur2&camp=1789&creative=390957
http://www.amazon.com/gp/student/signup/info?ie=UTF8&refcust=7EATHY4IXOFTTEMLIHVC3YL6DI&ref_type=generic
http://www.amazon.com/gp/video/primesignup?tag=menasheh02-20
https://smile.amazon.com/dp/B0005ZH4QI/?tag=menasheh02-20&psc=1&smid=ATVPDKIKX0DER
https://smile.amazon.com/s/ref=s9_acss_gb_cg_HTLLPCGB_3d1?fst=as%3Aoff&rh=n%3A165793011%2Cn%3A!2334111011%2Cn%3A!2334173011%2Cn%3A15539865011%2Cp_n_age_range%3A165936011%2Cp_72%3A1248963011&bbn=15539865011&ie=UTF8&qid=1476851901&rnid=1248961011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=events-center-c-4&pf_rd_r=8MKN8SY6C5ZP4NC1C0RB&pf_rd_t=701&pf_rd_p=e4acec8d-70de-466a-be44-05291b40a5d4&pf_rd_i=HTL_desktop
https://www.amazon.com/b/ref=s9_acss_gb_cg_HTLLPCGB_11a1?node=13521759011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=events-center-c-4&pf_rd_r=8MKN8SY6C5ZP4NC1C0RB&pf_rd_t=701&pf_rd_p=e4acec8d-70de-466a-be44-05291b40a5d4&pf_rd_i=HTL_desktop
https://www.amazon.com/Doctor-Vortex-Manipulator-Sonic-Screwdriver/dp/B001PR1ZII/ref=gbph_tit_e-7_fb02_fc8a0d34?smid=AOUT97QIB451U&pf_rd_p=8e268714-ad3d-444b-b0df-d51d8825fb02&pf_rd_s=events-center-c-7&pf_rd_t=701&pf_rd_i=HTL_desktop&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=8MKN8SY6C5ZP4NC1C0RB
https://www.amazon.com/dp/B0005ZH4QI/?tag=menasheh02-20&psc=1&smid=ATVPDKIKX0DER
https://www.amazon.com/gp/coupon/skippy-baking-sale/A2UI00T2I5JAV3?ie=UTF8&heroAsin=B0005ZH4QI&source=grid_db_13285418011&pf_rd_p=782d30de-8b22-4b3d-9009-0f7a0cb995d3&pf_rd_s=merchandised-search-3&pf_rd_t=Landing&pf_rd_i=13285418011&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=PPNJHXVZRMM4XP9KXGGG
https://www.amazon.com/Monster-High-School-Playset/dp/B006O6F932/ref=gbph_tit_e-7_fb02_85d3d028?smid=A3CXJV2JYTL237&pf_rd_p=8e268714-ad3d-444b-b0df-d51d8825fb02&pf_rd_s=events-center-c-7&pf_rd_t=701&pf_rd_i=HTL_desktop&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=8MKN8SY6C5ZP4NC1C0RB
https://www.amazon.com/s/ref=s9_acss_gb_cg_HTLLPCGB_3d1?fst=as%3Aoff&rh=n%3A165793011%2Cn%3A!2334111011%2Cn%3A!2334173011%2Cn%3A15539865011%2Cp_n_age_range%3A165936011%2Cp_72%3A1248963011&bbn=15539865011&ie=UTF8&qid=1476851901&rnid=1248961011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=events-center-c-4&pf_rd_r=8MKN8SY6C5ZP4NC1C0RB&pf_rd_t=701&pf_rd_p=e4acec8d-70de-466a-be44-05291b40a5d4&pf_rd_i=HTL_desktop

这些都不是:

https://www.google.com/search?safe=active&site=&source=hp&q=bad+regex&oq=bad+regex&gs_l=hp.3..0j0i22i30k1l9.724.2089.0.2265.10.9.0.0.0.0.269.1091.0j4j2.6.0....0...1c.1.64.hp..4.5.821.0..0i20k1j0i131k1j0i10k1.k62wRudUpsw
https://sellercentral.amazon.com/B53C945A8D?randomstuff=34341&otherrandomstuff=2

现在,它不匹配任何一个坏的 - 那部分相对简单。 (它也不匹配 url 与其中的 gp/redirect.html?。)棘手的部分是让匹配分别返回 url 的每个有用部分,特别是考虑到 if/elses 和 # .

#工作#

match[1] 应等于“www”或“smile”。

match[2] 应该等于 ASIN,或者如果 url 没有 /dp/%ASIN%, %SEO-string 则为空%/dp/%ASIN%,或 /gp/product/%ASIN%

# Not Working #

match[3] 应该等于 .com 之后的 url 的其余部分,或者如果设置了 ASIN 则在产品之后,但不包括末尾的 #

match[4] 应该等于从 match[3] 开始到 tag=,如果存在的话。

match[5] 应该等于标签参数,如果它存在的话

match[6] 应该等于标记参数(如果存在;否则为空)和 #(如果存在,否则结束)之间的其余 url

match[7] 应该等于末尾的 # 和它后面的任何内容,如果没有则为空

我刚刚开始研究更复杂的正则表达式,并遇到一些问题,比如如果有 # 就不会一直走到行尾,等等。

有经验的可以帮忙吗?谢谢。

最佳答案

试试这个适用于 javascript 的正则表达式:

https?:\/\/(?=(?:....)?amazon|smile)(www|smile)\S+com(((?:\/(?:dp|gp)\/([A-Z0-9]+))?\S*[?&]?(?:tag=))?\S*?)(?:#)?(\w*?-\w{2})?(\S*)(#?\S*)+

我做了一点改动:

match[3] & match[4] = match[2] & match[3]

match[2] = match[4].

希望对您有所帮助。

演示:https://regex101.com/r/sT2wj8/2

关于javascript - 完美的亚马逊链接正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40624371/

相关文章:

javascript - 在设定时间后销毁对象

javascript 正则表达式 trim 到 'space' AND 'dash' 或匹配

python - 为什么要在 python 正则表达式中使用 re.purge()?

javascript - 从 node.js 中的外部文件读取

javascript - Ionic 应用程序和服务器帖子 : Acces-Control-Allow-Origin

javascript - 在页面加载期间使用 Leaflet 预加载图层

c# - 从文件读取的行中删除\r

javascript - 如何在 javascript 循环中使用正则表达式匹配组中的数字范围?

html - 无法找出带换行符的正则表达式 - HTML

Javascript Regexp匹配不是的字符串