我有串这样的Javascript分割字符串
"(length>10)&(length<100)"
,我想这
(,length,>,10,),&,(,length,<,100,)
是否有可能得到使用JavaScript分裂和正则表达式。
我有串这样的Javascript分割字符串
"(length>10)&(length<100)"
,我想这
(,length,>,10,),&,(,length,<,100,)
是否有可能得到使用JavaScript分裂和正则表达式。
"(length>10)&(length<100)".split(/([()><&])/).filter(Boolean)
["(", "length", ">", "10", ")", "&", "(", "length", "<", "100", ")"]
此分割在任:(
,)
,>
,<
或&
(所述 “或” 是得益于[]
左右)。
保留分割字符是由于捕获(方括号周围的圆括号 - 它是ES5,但不支持IE8及以下)。
最后,要删除空字符串,我使用阵列上的filter(Boolean)
(也是ES5,不支持IE8及以下版本)。
result = subject.split(/\b|(?!\w)/);
此处分割字母数字和非字母数字字符之间的边界,另外两个非alnum字符之间。您可能会在字符串的开始/结尾处获得空匹配项,因此您需要放弃零长度结果。
取而代之的是split
,我会去为一个全球性的match
,它更像一个标记:
var input = "(length>10)&(length<100)";
var tokens = input.match(/\d+|[a-zA-Z]\w*|[()]|[<>=&|]+/g);
它扫描输入和匹配以下模式(按顺序):
\d+ # one ore more digits
| # OR
[a-zA-Z]\w* # an identifier
| # OR
[()] # a single opening- or closing parenthesis
| # OR
[<>=&|]+ # one or more operators: '<=', '&', '|=', ...
供参考,这称为令牌化或lexing。您可能想了解lexing和词法分析器(和词法分析器生成器)。 – Ashe 2012-07-13 07:37:24