On Sep 13, 2005, at 6:27 AM, Andreas Wahlin wrote:
foldingStartMarker = "^\s*([A-Za-z0-9.]+s*=\s*)?(function)\b";
Changing the \ to \ ^\s*([A-Za-z0-9.]+s*=\s*)?(function)\b
The above regular expression says: Starting at the start of the line (^) 0) find zero or more whitespace characters (\s*) 1) followed by one or more alphanumeric-or-period characters (the [...]+) 2) followed by zero or more 's' characters (s*) 3) followed by an equals sign (=) 4) followed by zero or more whitespace characters (\s*) 5) except you may skip all of 1-4 if you want, (the ?) (but save 'em if you find 'em) 6) but absolutely find the word 'function' (and save it as well) 7) followed by a word boundary (the \b)
So, that would match: foo.bar= function 1111111=function ......sssss= function function
but would not match: foo.bar = function functional
The lack of escaping of the 's' certainly seems like a mistake. It is intended, I suspect, to allow whitespace around the equals sign.
match = "^\s*(function)\s*([a-zA-Z_]\w*)\s*\(([^)]*)\)";
Changing the \ to \ (again, for standard regexp clarity): ^\s*(function)\s*([a-zA-Z_]\w*)\s*(([^)]*))
The above regular expression says: Starting at the start of the line 1) find zero or more whitespace characters (\s*) 2) followed by the word 'function' (and save it) 3) followed by zero or more whitespace characters (\s*) 4) Followed by a single identifier, saved ([a-zA-Z_]\w*) 5) followed by zero or more whitespace characters (\s*) 6) followed by a literal left parenthesis ( 7) save the characters up until the next right parenthesis [^)]* 8) followed by a literal right parenthesis
So, that would match: function foo11111 ( @#$%Q!#$%@T@$%!@#$ ) functionz()
but would not match: function () function() foo = function()
Because JavaScript can have anonymous functions, depending on the purpose of that match, you may want to make the intermediary identifier optional.
My own question - what is the importance of saving sub-expressions in both of the above cases?