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

2018-06-04 00:19:14 +08:00
 F1024

";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 这种值是变量 每次循环获取到一个 分别来取得价格 该如何代写正则表达式啊

4081 次点击
所在节点    JavaScript
11 条回复
azh7138m
2018-06-04 00:26:08 +08:00
没看懂啥意思
给个 test input 和期望的输出看下?
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
2018-06-04 00:41:09 +08:00
前边也用正则匹配下就好了,提取值时候注意下分组就好了
azh7138m
2018-06-04 00:48:32 +08:00
xqin
2018-06-04 00:56:52 +08:00
@azh7138m 不是, 他是想用 动态的方式生成正则.

但其实不需要, 按我刚才说的方式来做, 直接全部匹配出来, 然后爱用哪个用哪个.
gengfire
2018-06-04 08:36:36 +08:00
reg = new RegExp(string + var);
F1024
2018-06-04 09:27:36 +08:00
@mringg
前面的值 1627207:xxxxxxx 不是固定的而且顺序是被打乱的 是从其他地方取过来的
所以要每次获取一个 1627207:xxxxxxx 来获取对应的 price
F1024
2018-06-04 09:35:29 +08:00
@azh7138m 我上图了 你看下 第二个图 新窗口打开下
F1024
2018-06-04 09:35:51 +08:00
@mringg 我上图了 麻烦帮我看看
azh7138m
2018-06-04 09:38:29 +08:00
当成 JSON 直接用啊,为啥搞这么麻烦
laqow
2018-06-04 12:51:08 +08:00
第一次替换:
, →回车
第二次查找:
945375942.*?(\d+.\d+)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/460080

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX