我有这样的字符串
"(length>10)&(length<100)"
我想要这个
(,length,>,10,),&,(,length,<,100,)
是否可以使用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)/);
这在字母数字和非字母数字字符之间的边界处分裂,另外在两个非字母数字字符之间分裂。您可能会在字符串的开头/结尾得到一个空匹配项,因此您需要丢弃零长度的结果。
而不是 a split
,我会选择一个 global 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: '<=', '&', '|=', ...