|
90 | 90 | }, |
91 | 91 |
|
92 | 92 | _bindingRegex: (function() { |
93 | | - var IDENT = '([\\w\\s-_.:$]+)'; |
94 | | - // The following lookahead group (?= ... ) and backreference \\4, etc. |
95 | | - // for repeating identifier characters prevent catastrophic |
96 | | - // backtracking when the argument which contains the identifier itself |
97 | | - // is repeated. This approximates possessive/atomic groups which are |
98 | | - // otherwise unsupported in Javascript. Unfortunately this means each |
99 | | - // usage of identifier must be separated to index the backreference |
100 | | - // correctly. |
101 | | - // v..............v v |
102 | | - var PROPERTY = '(?:(?=' + IDENT + ')\\4)'; |
103 | | - var METHOD = '(?:(?=' + IDENT + ')\\5)'; |
104 | | - var ARG_IDENT = '(?:(?=' + IDENT + ')\\6)'; |
105 | | - var NUMBER = '(?:' + '[0-9]+' + ')'; |
106 | | - var SQUOTE_STRING = '(?:' + '\'(?:[^\'\\\\]|\\\\\'|\\\\,)*\'' + ')'; |
107 | | - var DQUOTE_STRING = '(?:' + '"(?:[^"\\\\]|\\\\"|\\\\,)*"' + ')'; |
| 93 | + var IDENT = '(?:' + '[a-zA-Z_$][a-zA-Z0-9_.:$-]*' + '\\s*' + ')'; |
| 94 | + var NUMBER = '(?:' + '[-+]?[0-9]*\\.?[0-9]+(?:[eE][-+]?[0-9]+)?' + '\\s*' + ')'; |
| 95 | + var SQUOTE_STRING = '(?:' + '\'(?:[^\'\\\\]|\\\\.)*\'' + '\\s*' + ')'; |
| 96 | + var DQUOTE_STRING = '(?:' + '"(?:[^"\\\\]|\\\\.)*"' + '\\s*' + ')'; |
108 | 97 | var STRING = '(?:' + SQUOTE_STRING + '|' + DQUOTE_STRING + ')'; |
109 | | - var ARGUMENT = '(?:' + ARG_IDENT + '|' + NUMBER + '|' + STRING + ')'; |
110 | | - var ARGUMENT_LIST = '(?:(?:' + ARGUMENT + ',?' + ')*)'; |
111 | | - var COMPUTED_FUNCTION = '(?:' + METHOD + '\\(' + ARGUMENT_LIST + '\\)' + ')'; |
112 | | - var BINDING = '(' + PROPERTY + '|' + COMPUTED_FUNCTION + ')'; // Group 3 |
113 | | - var OPEN_BRACKET = '(\\[\\[|{{)'; // Group 1 |
| 98 | + var ARGUMENT = '(?:' + IDENT + '|' + NUMBER + '|' + STRING + ')'; |
| 99 | + var ARGUMENTS = '(?:' + ARGUMENT + '(?:,\\s*' + ARGUMENT + ')*' + ')'; |
| 100 | + var ARGUMENT_LIST = '(?:' + '\\(\\s*' + |
| 101 | + '(?:' + ARGUMENTS + '?' + ')' + |
| 102 | + '\\)\\s*' + ')'; |
| 103 | + var BINDING = '(' + IDENT + ARGUMENT_LIST + '?' + ')'; // Group 3 |
| 104 | + var OPEN_BRACKET = '(\\[\\[|{{)' + '\\s*'; |
114 | 105 | var CLOSE_BRACKET = '(?:]]|}})'; |
115 | | - var NEGATE = '(!?)'; // Group 2 |
| 106 | + var NEGATE = '(?:(!)\\s*)?'; // Group 2 |
116 | 107 | var EXPRESSION = OPEN_BRACKET + NEGATE + BINDING + CLOSE_BRACKET; |
117 | 108 | return new RegExp(EXPRESSION, "g"); |
118 | 109 | })(), |
|
0 commit comments