我不确定count是否是正确的用词,因为对我来说多少并不重要,但让我解释一下。我的数据将采用以下格式:(hi,(1,2),hey),(yo,(3,(rawr),4),howdy)
,我无法控制有多少维。我想抓住最低的组["hi", Array[], "hey"]
和["yo", Array[], "howdy"]
因此,如果有一种“计数”的方法,我可以计算开括号,然后计算闭括号,当它达到0时,即正则表达式结束。例如:
(hi,(1,2),hey),(yo,(3,(rawr),4),howdy)
1---2---1----0-1---2--3----2--1------0
话虽如此,我不认为计数是可能的,但我想要的是替代解决方案。这是我到目前为止的
/\([^\(]*?\)/
内容,但仅从每个低级别组(又称为(1,2)
和(rawr)
)返回最高级别的组。 最佳答案
您可以使用堆栈来跟踪(
和)
。
Array.reduce(
'(hi,(1,2),hey),(yo,(3,(rawr),4),howdy)',
function(x,y){
if(y=='(')
return [x[0]+1, x[1]+(x[0]+1)]
else if(y==')')
return [x[0]-1, x[1]+(x[0]-1)]
else
return [x[0], x[1]+'-']
},
[0,'']
)[1]
在
firebug
控制台中尝试。