2012-07-13 97 views
1

我有串这样的Javascript分割字符串

"(length>10)&(length<100)" 

,我想这

(,length,>,10,),&,(,length,<,100,) 

是否有可能得到使用JavaScript分裂和正则表达式。

+0

供参考,这称为令牌化或lexing。您可能想了解lexing和词法分析器(和词法分析器生成器)。 – Ashe 2012-07-13 07:37:24

回答

3
"(length>10)&(length<100)".split(/([()><&])/).filter(Boolean) 

["(", "length", ">", "10", ")", "&", "(", "length", "<", "100", ")"] 

此分割在任:()><&(所述 “或” 是得益于[]左右)。

保留分割字符是由于捕获(方括号周围的圆括号 - 它是ES5,但不支持IE8及以下)。

最后,要删除空字符串,我使用阵列上的filter(Boolean)(也是ES5,不支持IE8及以下版本)。

2
result = subject.split(/\b|(?!\w)/); 

此处分割字母数字和非字母数字字符之间的边界,另外两个非alnum字符之间。您可能会在字符串的开始/结尾处获得空匹配项,因此您需要放弃零长度结果。

0

取而代之的是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: '<=', '&', '|=', ...