我不确定“计数”这个词是否正确,因为对我来说有多少并不重要,但让我解释一下。我的数据将采用如下格式: (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
控制台中尝试一下。
关于javascript - 如何在正则表达式中输入 "count characters"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12310149/