mirror of
https://github.com/Polymer/polymer.git
synced 2025-02-25 18:55:30 -06:00
Improvements to regex.
This commit is contained in:
parent
04cd184919
commit
a3d17d5e75
@ -90,29 +90,20 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
||||
},
|
||||
|
||||
_bindingRegex: (function() {
|
||||
var IDENT = '([\\w\\s-_.:$]+)';
|
||||
// The following lookahead group (?= ... ) and backreference \\4, etc.
|
||||
// for repeating identifier characters prevent catastrophic
|
||||
// backtracking when the argument which contains the identifier itself
|
||||
// is repeated. This approximates possessive/atomic groups which are
|
||||
// otherwise unsupported in Javascript. Unfortunately this means each
|
||||
// usage of identifier must be separated to index the backreference
|
||||
// correctly.
|
||||
// v..............v v
|
||||
var PROPERTY = '(?:(?=' + IDENT + ')\\4)';
|
||||
var METHOD = '(?:(?=' + IDENT + ')\\5)';
|
||||
var ARG_IDENT = '(?:(?=' + IDENT + ')\\6)';
|
||||
var NUMBER = '(?:' + '[0-9]+' + ')';
|
||||
var SQUOTE_STRING = '(?:' + '\'(?:[^\'\\\\]|\\\\\'|\\\\,)*\'' + ')';
|
||||
var DQUOTE_STRING = '(?:' + '"(?:[^"\\\\]|\\\\"|\\\\,)*"' + ')';
|
||||
var IDENT = '(?:' + '[a-zA-Z_$][a-zA-Z0-9_.:$-]*' + '\\s*' + ')';
|
||||
var NUMBER = '(?:' + '[-+]?[0-9]*\\.?[0-9]+(?:[eE][-+]?[0-9]+)?' + '\\s*' + ')';
|
||||
var SQUOTE_STRING = '(?:' + '\'(?:[^\'\\\\]|\\\\.)*\'' + '\\s*' + ')';
|
||||
var DQUOTE_STRING = '(?:' + '"(?:[^"\\\\]|\\\\.)*"' + '\\s*' + ')';
|
||||
var STRING = '(?:' + SQUOTE_STRING + '|' + DQUOTE_STRING + ')';
|
||||
var ARGUMENT = '(?:' + ARG_IDENT + '|' + NUMBER + '|' + STRING + ')';
|
||||
var ARGUMENT_LIST = '(?:(?:' + ARGUMENT + ',?' + ')*)';
|
||||
var COMPUTED_FUNCTION = '(?:' + METHOD + '\\(' + ARGUMENT_LIST + '\\)' + ')';
|
||||
var BINDING = '(' + PROPERTY + '|' + COMPUTED_FUNCTION + ')'; // Group 3
|
||||
var OPEN_BRACKET = '(\\[\\[|{{)'; // Group 1
|
||||
var ARGUMENT = '(?:' + IDENT + '|' + NUMBER + '|' + STRING + ')';
|
||||
var ARGUMENTS = '(?:' + ARGUMENT + '(?:,\\s*' + ARGUMENT + ')*' + ')';
|
||||
var ARGUMENT_LIST = '(?:' + '\\(\\s*' +
|
||||
'(?:' + ARGUMENTS + '?' + ')' +
|
||||
'\\)\\s*' + ')';
|
||||
var BINDING = '(' + IDENT + ARGUMENT_LIST + '?' + ')'; // Group 3
|
||||
var OPEN_BRACKET = '(\\[\\[|{{)' + '\\s*';
|
||||
var CLOSE_BRACKET = '(?:]]|}})';
|
||||
var NEGATE = '(!?)'; // Group 2
|
||||
var NEGATE = '(?:(!)\\s*)?'; // Group 2
|
||||
var EXPRESSION = OPEN_BRACKET + NEGATE + BINDING + CLOSE_BRACKET;
|
||||
return new RegExp(EXPRESSION, "g");
|
||||
})(),
|
||||
|
Loading…
Reference in New Issue
Block a user