【发布时间】:2016-09-09 21:25:01
【问题描述】:
如何拆分
-(ab | c) & d -> (d|c)&e f
放入数组
['-', '(', 'ab', '|', 'c', ')', '&', 'd', '->', '(', 'd', '|', 'c', ')', '&', 'e', '<->', 'f']
所以一般来说,它应该将字符串拆分为标记。如果两个字母组合成一个单词(例如ab),则应将其视为1个令牌。我有运算符-、(、)、|、&、-> 和 <->。
可能是这样的
var str = '-(ab | c) & d -> (d|c)&e <-> f';
var regex = /([-&\|()]|\w+)/;
str.split(regex);
但不包括-> 和<->
【问题讨论】:
-
好吧,你没有将它们包含在你的 reg exp 中......
-
我知道。这是因为我不知道该怎么做。如果我只是将它们添加到
[-&\|,它也会只识别<、-和>。而且我只对它感兴趣以完全识别->或<-> -
无效输入怎么样,例如
-(ab | c) @@@ & %%% d? -
他们实际上应该被淘汰。我没有想到。实际上,它应该只允许字母组合 [A-Za-z]。所以偶数应该被淘汰..
-
@Jamgreen - 如果你不关心 anything 其他,你不应该使用 split。顺序,范围,嵌套,运算符优先级怎么样。这不是以任何理智的方式解析令牌的方法。你应该只匹配你需要的,忘记其余的。
->?|<->|[()|&]|[a-zA-Z]+
标签: javascript regex tokenize