JS正则表达式 怎么取子匹配文本并加入到数组中

WXHOST信息专员 2020-10-01 01:15:34
目前我有3条数据:
{"skuId":"55265684225","img":"/rank/jfs/t1/131957/13/11235/175364/5f715d1fEc508cb85/cf77205cd7d87001.jpg","jdPrice":"569.00"},{"skuId":"72412662423","img":"/rank/jfs/t1/139230/8/9619/215881/5f713d60Ee352e945/2e075e6c6326b2fc.jpg","jdPrice":"279.00"},{"skuId":"10020320308913","img":"/rank/jfs/t1/126460/35/9535/96614/5f364f3cE69e21450/cb02cc58ab4f6203.jpg","jdPrice":"259.00"}


然后我用js正则表达式.
var pattern = /{"skuId":"(\d+)","img":"(.*?)","jdPrice":"(.*?)"}/g,
str = '上面的3条数据文本';
str.match(pattern).

取出来也还是:
{"skuId":"55265684225","img":"/rank/jfs/t1/131957/13/11235/175364/5f715d1fEc508cb85/cf77205cd7d87001.jpg","jdPrice":"569.00"}
{"skuId":"72412662423","img":"/rank/jfs/t1/139230/8/9619/215881/5f713d60Ee352e945/2e075e6c6326b2fc.jpg","jdPrice":"279.00"}
{"skuId":"10020320308913","img":"/rank/jfs/t1/126460/35/9535/96614/5f364f3cE69e21450/cb02cc58ab4f6203.jpg","jdPrice":"259.00"}


可是,我想要的是这样的结果,正则匹配,多次尝试我都失败,故前来提问。

正则匹配后,把提取的子匹配文本数据分别加入数组里,这步用JS也不会写。

arrA:
55265684225.72412662423,0020320308913

arrB:569.00,279.00,259.00

谢谢。



...全文
845 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2020-10-01
  • 打赏
  • 举报
回复
一定要用正则吗?转json对象直接提取不好吗?
//方法1,通过json字符串转json对象
var arrA = []
var arrB = []
var str = '{"skuId":"55265684225","img":"/rank/jfs/t1/131957/13/11235/175364/5f715d1fEc508cb85/cf77205cd7d87001.jpg","jdPrice":"569.00"},{"skuId":"72412662423","img":"/rank/jfs/t1/139230/8/9619/215881/5f713d60Ee352e945/2e075e6c6326b2fc.jpg","jdPrice":"279.00"},{"skuId":"10020320308913","img":"/rank/jfs/t1/126460/35/9535/96614/5f364f3cE69e21450/cb02cc58ab4f6203.jpg","jdPrice":"259.00"}'
str.split(/(?<=}),/).forEach(e=>{ //以[},]分割字符串
var obj = JSON.parse(e); //转成json对象
arrA.push(obj.skuId)
arrB.push(obj.jdPrice)
})
console.log(arrA)
console.log(arrB)


如果非要用正则
//方法2,用正则提取
var arrA = []
var arrB = []
var pattern = /{"skuId":"(\d+)","img":"(.*?)","jdPrice":"(.*?)"}/g
str.split(/(?<=}),/).forEach(e=>{ //以[},]分割字符串
var res = e.toString().matchAll(pattern).next() //用matchAll来匹配组信息,第0组位字符串本身
arrA.push(res.value[1]) //第1组提取信息
arrB.push(res.value[3]) //第3组提取信息
})
console.log(arrA)
console.log(arrB)
qq_45860132 2020-10-01
  • 打赏
  • 举报
回复
确实如上2楼所说。正则不是最佳选择。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧