我有以下字符串(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

07-24 09:51
查看更多