我有以下字符串(CrLf
可能会插入{}
和()
之外)
{item1}, {item2} (2), {item3} (4), {item4}
(1), {item5},{item6}(5)
我试图将每个项目分离为其组件,并使用正则表达式从中创建一个JSON。
输出应如下所示
{"name":"item1", "count":""}, {"name":"item2", "count":""}, {"name":"item3", "count":""}, {"name":"item4", "count":""}, {"name":"item5", "count":""},{"name":"item6", "count":""}
到目前为止,我已经关注了
regex
,但是它没有捕获第二组。\{(.[^,\n\]]*)\}\s*[\((.\d)\)]*
我用替换火柴
{\"name\":\"${1}\", \"count\":\"${2}\"}
这是我的test link
我做错了什么?
第二个问题
是否可以将未计数的项目更改为零,以使第二个捕获组读取为0?
例如,不要将
{item1}
更改为{"name":"item1", "count":""}
,而应将其更改为{"name":"item1", "count":"0"}
最佳答案
1-您正在使用格式不正确的正则表达式。 (在字符序列[]
中使用捕获的组)
2-您的替换模式中不包括第二个捕获的组。
我已将您的Regex更新为:
\{(.[^,\n\]]*)\}\s*(\((\d*)\))?
Live demo
我将为这个问题提供更好的正则表达式。
更新:
{(\w+)}\s*(\((\d+)[),])?
Live demo