1

我有这样的字符串

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

我想要这个

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

是否可以使用javascript拆分和正则表达式。

4

3 回答 3

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

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

这分裂为:、、、或((“或”是由于周围的原因)。)><&[]

由于捕获(方括号周围的括号 - 虽然它是 ES5,因此在 IE8 及以下版本中不支持),因此保留了拆分字符。

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

于 2012-07-13T07:41:12.590 回答
2
result = subject.split(/\b|(?!\w)/);

这在字母数字和非字母数字字符之间的边界处分裂,另外在两个非字母数字字符之间分裂。您可能会在字符串的开头/结尾得到一个空匹配项,因此您需要丢弃零长度的结果。

于 2012-07-13T07:41:26.253 回答
0

而不是 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: '<=', '&', '|=', ...
于 2012-07-13T07:47:24.633 回答