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

请教一个正则

  •  
  •   Martin9 · 111 天前 · 1281 次点击
    这是一个创建于 111 天前的主题,其中的信息可能已经有所发展或是发生改变。

    字符串如下: _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
        1
    a494836960   111 天前
    js: replace(/(.*?);?=(.*?)&?/g,'$1=$2\n')
        2
    a494836960   111 天前
    另外你的正则 (\w*[-]*\w+[-]*\w+) 这段有两个 \w+ 所以匹配结果最少要 两位数
        3
    rrfeng   111 天前
    看着这么整齐不如直接 split 再进一步处理。
        4
    Martin9   111 天前
    @rrfeng 是一个基类,很多请求都是要通过这个请求,不好改用 split
        5
    Martin9   111 天前
    @a494836960 thx。我试了下但是效果是这样
    false&nd=
    1566206479316&rows=
    50&page=
    2&sidx=&
    有点岔开了
        6
    xenme   111 天前   ♥ 1
        7
    a494836960   111 天前   ♥ 1
    /(.*?);?=(.*?)&/g 这样试试。。
        8
    Martin9   111 天前
    @xenme @a494836960 谢谢已发铜币
        9
    imdong   111 天前   ♥ 1
    (?:^|\&)([^;=]+);?=([^&]+)?(?=$|\&)

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

    最少匹配,\w .* 这样的写法会计算次数太多。
    这种匹配广泛的我建议用 [^] 排除法。
    首末用了两次断言,
        10
    autoxbc   111 天前   ♥ 1
    如果你的项目是 js,可以考虑用 URI.js

    每次用正则去匹配结构化的数据,就等于重新写了一遍这种数据结构的解析器
    我们应该重新写解析器吗?不,应该用别人已经写好的
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2900 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 11:55 · PVG 19:55 · LAX 03:55 · JFK 06:55
    ♥ Do have faith in what you're doing.