我有这样的字符串
"(length>10)&(length<100)"
我想要这个
(,length,>,10,),&,(,length,<,100,)
是否可以使用javascript split和regex。
答案 0 :(得分:3)
"(length>10)&(length<100)".split( /([()><&])/ ).filter( Boolean )
["(", "length", ">", "10", ")", "&", "(", "length", "<", "100", ")"]
这可以分为:(
,)
,>
,<
或&
(“或”归功于{{1}周围)。
保留分割字符是由于捕获(方括号周围的括号 - 虽然它是ES5,因此在IE8及以下版本中不受支持)。
最后,要删除空字符串,我在数组上使用[]
(也是ES5,在IE8及以下版本中也不支持)。
答案 1 :(得分:2)
result = subject.split(/\b|(?!\w)/);
这在字母数字和非字母数字字符之间的边界处分开,另外在两个非alnum字符之间。您可能会在字符串的开头/结尾处获得空匹配,因此您需要丢弃零长度结果。
答案 2 :(得分: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: '<=', '&', '|=', ...