私は、javascript用の完璧なアマゾンリンク正規表現を構築しようとしています。これは私がこれまで持っているものです。パーフェクトアマゾンリンク正規表現
var reg = /https?:\/\/(www|smile)\.amazon\.com\/(?:(?:[\w-]+\/)?(?:dp|gp\/product)\/(\w{10})\/)?/;
私は、これはその全体が次のすべてのURLにマッチさせたい:
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と#を考慮して、URLの各有用な部分を別々に返すようにしています。 #
match[1]
作業
#は "WWW" またはいずれか等しくなければならない "笑顔を。"
match[2]
は.COM後のURLの残りの部分を等しく、または後にすべきASINを等しく、またはURLが/dp/%ASIN%
、%SEO-string%/dp/%ASIN%
、または/gp/product/%ASIN%
match[3]
を持っていない場合は空白にする必要がありますASINが設定されているが、最後に#が含まれていない製品
match[4]
が存在する場合は、[3]の開始からtag=
に一致するはずです。そして#(それが存在する場合、そうでなければ終了する);それは(そうでなければ空白が存在する場合)タグパラメータとURLの残りの部分に等しくなければならない
match[6]
が存在する場合
match[5]
は、タグパラメータと等しくなければなりません
match[7]
は1
がない場合、私はちょうどより複雑な正規表現になりそうだ、とすべての道を進んでいないようなものの上に立ち往生、それの後に終わり、何に#を等しく、または空白必要があります#などの行がある場合は、行末まで。
もっと経験豊かな人は誰ですか?ありがとう。
代わりに 'RegExp'コンストラクタの、文字通りの正規表現を使用します。 – Tushar
@Tusharはマッチ機能で使用できますか?どういう意味ですか? – Menasheh
'var regex = /https?:\/\/(www|smile)\.amazon\.com\/(?:(???[[ww-]+\/)?(?:dp|gp\/) ([\ w \/= - ] +)?(\ [\ w] w] +)?/; 'それから##JSで動作しない__問題が解決されます。 'RegExp'コンストラクタで、文字列が渡されるときにスラッシュをエスケープする必要があります。 – Tushar