
想要提取淘宝商品链接 Url 里的 id,但在下面第一条测试中遇到了些问题,会把后面"trackid=2"也识别进去
我用的正则表达式:
^.+id=(\d+)(&?) 测试 Url 如下
https://item.taobao.com/item.htm?id=598384050583&ali_trackid=2:mm_31395756_17858613_64290316:1582994613_109_29192307&pvid=null&scm=null https://item.taobao.com/item.htm?spm=a230r.1.14.44.60c43f398SnbJg&id=596339389459&ns=1&abbucket=14#detail https://item.taobao.com/item.htm?spm=a230r.1.14.44.60c43f398SnbJg&ns=1&abbucket=14#detail&id=596339389459 1 ciqulover 2020 年 3 月 1 日 ``` [&?]id=(\d+) ``` |
2 imn1 2020 年 3 月 1 日 ^.+id=(\d+) 就这样不行么?贪婪就可以了 你写的也可以,只提取 match1 就是了,match2 舍弃,match0 为全部 |
3 autoxbc 2020 年 3 月 1 日 每次用正则解析序列化的结构数据,就是重新写了一遍这种数据结构的解析器 >>> new URI('https://item.taobao.com/item.htm?id=598384050583&ali_trackid=2:mm_31395756_17858613_64290316:1582994613_109_29192307&pvid=null&scm=null').search(true).id "598384050583" >>> new URI('https://item.taobao.com/item.htm?spm=a230r.1.14.44.60c43f398SnbJg&id=596339389459&ns=1&abbucket=14#detail').search(true).id "596339389459" >>> new URI('https://item.taobao.com/item.htm?spm=a230r.1.14.44.60c43f398SnbJg&ns=1&abbucket=14#detail&id=596339389459').search(true).id undefined 注意第三条之所以没有成功获取,是因为 url 本身就不包含合法的 id,那个 id=596339389459 位于 # 符号之后,会被作为 Location hash 的一部分,而不是 Location search 的一部分。如果一个程序从非法的数据中提取到了结果,只能说这个程序写错了 url 是个稍微有点复杂的东西,希望任何人不要试图用正则处理 url,除非你是解析器的作者 在 Javascript 环境中,上面的 URI() 来自 URI.js ,也可以用全局对象 URL 中的 searchParams,相信其他语言里也有对应的解析库 |
4 ETiV 2020 年 3 月 1 日 via iPhone \bid=(\d+) \b= boundary |
5 mrytsr 2020 年 3 月 1 日 via Android \b |
8 imn1 2020 年 3 月 1 日 细看了一下,关键是 ali_trackid= 里面也有“id=”,边界混淆了 所以,前面的正则基本都没什么问题,你在 id=前面加上[^A-Za-z] 或者\b 等等把边界厘清就行了 |