我正在寻找一个与未知数量的嵌套函数匹配的正则表达式(**)。 所以
expression
function(expression)
function(function(expression))
function(function(function(expression)))
etc.
将全部匹配成功。但是,例如,如果我在末尾添加一个额外的结束括号,它将不包括在匹配中。
(**)请不要回答通过解析(并计算括号)而不是使用正则表达式来做更容易的事情 - 在我抓了一会儿之后我已经知道了!
答案 0 :(得分:5)
我正在寻找一个与未知数量的嵌套函数匹配的正则表达式(**)。
一些正则表达式实现支持递归匹配(Perl,PHP,.NET),但JavaScript不支持。所以,你的问题的答案是:不,这是不可能的。
答案 1 :(得分:5)
这不是递归的,但它可以解决问题。
var target = "function(function(function(expression)))";
var pattern = /\s*([a-zA-Z_]\w*[(](\s*[a-zA-Z_]\w*[(]|[^()]+[)]|[)])+[)])/;
var matches = target.match(pattern);
var target= matches[1];
\s* // 0+ white space characters
( // Capture group for what you want
[a-zA-Z_] // 1 letter/underscore
\w* // 0+ word characters (alpha-numeric/underscore)
[(] // left parenthesis
( // PIECES:
\s* // 0+ white space characters
[a-zA-Z_] // 1 letter/underscore
\w* // 0+ word characters (alpha-numeric/underscore)
[(] // left parenthesis
| // OR
[^()]+ // 1+ non-parenthesis characters
[)] // right parenthesis
| // OR
[)] // right parenthesis
)+ // 1+ of these PIECES
[)] // right parenthesis
)
答案 2 :(得分:0)