Skip to content

Commit a3d17d5

Browse files
committed
Improvements to regex.
1 parent 04cd184 commit a3d17d5

1 file changed

Lines changed: 12 additions & 21 deletions

File tree

‎src/lib/annotations/annotations.html‎

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -90,29 +90,20 @@
9090
},
9191

9292
_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*' + ')';
10897
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*';
114105
var CLOSE_BRACKET = '(?:]]|}})';
115-
var NEGATE = '(!?)'; // Group 2
106+
var NEGATE = '(?:(!)\\s*)?'; // Group 2
116107
var EXPRESSION = OPEN_BRACKET + NEGATE + BINDING + CLOSE_BRACKET;
117108
return new RegExp(EXPRESSION, "g");
118109
})(),

0 commit comments

Comments
 (0)