V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
F1024
V2EX  ›  JavaScript

请教 js 正则匹配中有变量该如何处理啊

  •  
  •   F1024 · 2018-06-04 00:19:14 +08:00 · 4163 次点击
    这是一个创建于 2369 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ";1627207:945375942;":{"price":"78.00"},

    ";1627207:771237690;":{"price":"88.00"},

    ";1627207:1349519332;":{"price":"58.00"},

    ";1627207:1554775267;":{"price":"68.00"},

    /1627207:945375942;":{"price":"(\d+.\d+)"/ //这样匹配结果 78

    1627207:XXXXXXXX 这种值是变量 每次循环获取到一个 分别来取得价格 该如何代写正则表达式啊

    第 1 条附言  ·  2018-06-04 09:33:12 +08:00








    图一里有值 从图 2 里取价格 分别对应到图一的 span 上 顺序是乱的 所以要用变量正则
    azh7138m
        1
    azh7138m  
       2018-06-04 00:26:08 +08:00 via Android
    没看懂啥意思
    给个 test input 和期望的输出看下?
    xqin
        2
    xqin  
       2018-06-04 00:31:36 +08:00
    let a = `
    ";1627207:945375942;":{"price":"78.00"},

    ";1627207:771237690;":{"price":"88.00"},

    ";1627207:1349519332;":{"price":"58.00"},

    ";1627207:1554775267;":{"price":"68.00"},

    `

    let mm = {}

    a.replace(/;(\d+):(\d+);":\{"price":"(.+?)"\}/g, function (all, a, b, price) {
    if (typeof mm[a] === 'undefined')
    {
    mm[a] = {}
    }

    mm[a][b] = price;
    })

    console.log(JSON.stringify(mm, 0, 2))


    ```
    {
    "1627207": {
    "771237690": "88.00",
    "945375942": "78.00",
    "1349519332": "58.00",
    "1554775267": "68.00"
    }
    }
    ```

    得到 mm 之后, 想怎么取就怎么取..
    mringg
        3
    mringg  
       2018-06-04 00:41:09 +08:00 via iPhone
    前边也用正则匹配下就好了,提取值时候注意下分组就好了
    azh7138m
        4
    azh7138m  
       2018-06-04 00:48:32 +08:00
    xqin
        5
    xqin  
       2018-06-04 00:56:52 +08:00
    @azh7138m 不是, 他是想用 动态的方式生成正则.

    但其实不需要, 按我刚才说的方式来做, 直接全部匹配出来, 然后爱用哪个用哪个.
    gengfire
        6
    gengfire  
       2018-06-04 08:36:36 +08:00 via iPhone
    reg = new RegExp(string + var);
    F1024
        7
    F1024  
    OP
       2018-06-04 09:27:36 +08:00
    @mringg
    前面的值 1627207:xxxxxxx 不是固定的而且顺序是被打乱的 是从其他地方取过来的
    所以要每次获取一个 1627207:xxxxxxx 来获取对应的 price
    F1024
        8
    F1024  
    OP
       2018-06-04 09:35:29 +08:00
    @azh7138m 我上图了 你看下 第二个图 新窗口打开下
    F1024
        9
    F1024  
    OP
       2018-06-04 09:35:51 +08:00
    @mringg 我上图了 麻烦帮我看看
    azh7138m
        10
    azh7138m  
       2018-06-04 09:38:29 +08:00 via Android
    当成 JSON 直接用啊,为啥搞这么麻烦
    laqow
        11
    laqow  
       2018-06-04 12:51:08 +08:00 via Android
    第一次替换:
    , →回车
    第二次查找:
    945375942.*?(\d+.\d+)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1099 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:45 · PVG 06:45 · LAX 14:45 · JFK 17:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.