V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Martin9
V2EX  ›  正则表达式

请教一个正则

  •  
  •   Martin9 · 2019-08-20 09:55:52 +08:00 · 3249 次点击
    这是一个创建于 1915 天前的主题,其中的信息可能已经有所发展或是发生改变。

    字符串如下: _search=false&nd;=1566206479316&rows;=50&page;=2&sidx;=&sord;=desc&businessType;=&containerTypeId;=&operStatus;=&dispatchStatus;=&portId;=&customerId;=&billNo;=&orderNo;=&containerNo;=&customerOrderNo;=&yhNO;=&storageYardId;=&createBy;=&makeboxBeginDate;=2019-08-01&makeboxEndDate;=2019-08-19&dispatchGroupId;=&cityCode;=&salesmanid;=&relateAddrAddress;=

    target: _search=false&
    nd=1566206479316&
    rows=50&
    page=2
    sidx=&
    sord=desc&
    businessType=&
    makeboxBeginDate=2019-08-01&
    makeboxEndDate=2019-08-19&

    难点是中间有两个日期所以写的很费劲。
    目前在用的:
    (\w+)=(\w*[-]*\w+[-]*\w+)&

    这个正则问题是 page=2 匹不到。page=10,11,12 两位数就可以
    不太懂是什么问题.

    10 条回复    2019-08-20 12:08:25 +08:00
    a494836960
        1
    a494836960  
       2019-08-20 10:10:40 +08:00
    js: replace(/(.*?);?=(.*?)&?/g,'$1=$2\n')
    a494836960
        2
    a494836960  
       2019-08-20 10:12:55 +08:00
    另外你的正则 (\w*[-]*\w+[-]*\w+) 这段有两个 \w+ 所以匹配结果最少要 两位数
    rrfeng
        3
    rrfeng  
       2019-08-20 10:13:30 +08:00
    看着这么整齐不如直接 split 再进一步处理。
    Martin9
        4
    Martin9  
    OP
       2019-08-20 10:18:13 +08:00
    @rrfeng 是一个基类,很多请求都是要通过这个请求,不好改用 split
    Martin9
        5
    Martin9  
    OP
       2019-08-20 10:23:26 +08:00
    @a494836960 thx。我试了下但是效果是这样
    false&nd=
    1566206479316&rows=
    50&page=
    2&sidx=&
    有点岔开了
    xenme
        6
    xenme  
       2019-08-20 10:30:24 +08:00   ❤️ 1
    a494836960
        7
    a494836960  
       2019-08-20 10:30:27 +08:00   ❤️ 1
    /(.*?);?=(.*?)&/g 这样试试。。
    Martin9
        8
    Martin9  
    OP
       2019-08-20 10:39:04 +08:00
    @xenme @a494836960 谢谢已发铜币
    imdong
        9
    imdong  
       2019-08-20 10:53:30 +08:00   ❤️ 1
    (?:^|\&)([^;=]+);?=([^&]+)?(?=$|\&)

    https://regex101.com/r/vzBBz4/3

    最少匹配,\w .* 这样的写法会计算次数太多。
    这种匹配广泛的我建议用 [^] 排除法。
    首末用了两次断言,
    autoxbc
        10
    autoxbc  
       2019-08-20 12:08:25 +08:00   ❤️ 1
    如果你的项目是 js,可以考虑用 URI.js

    每次用正则去匹配结构化的数据,就等于重新写了一遍这种数据结构的解析器
    我们应该重新写解析器吗?不,应该用别人已经写好的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2857 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:45 · PVG 15:45 · LAX 23:45 · JFK 02:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.