I\'m looking for a regular expression (**) that will match an unknown number of nested functions. So
expression
function(expression)
function(function(expres
Worth noting as per Bart Kiers's answer that some regex engines (excluding Javascript) have extended features to provide recursive matching - but such a feature shouldn't be considered to be a regular expression as per the formal definition.
I'm looking for a regular expression (**) that will match an unknown number of nested functions.
Some regex implementations support recursive matching (Perl, PHP, .NET), but JavaScript does not. So, the answer to your question is: no, that is not possible.
This isn't recursive, but it does the trick.
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
)