用正则表达式的单词或运算符拆分

时间:2016-09-09 21:25:01

标签: javascript regex tokenize

如何拆分

  

- (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);

但它不包含-><->

3 个答案:

答案 0 :(得分:2)

这个怎么样?

var string = '-(ab | c) & d -> (d|c)&e <-> f';
    
var result = string.match(/<->|->|[-()|&]|\w+/g);

console.log(result);

您可以使用[]|运算符。请参阅JavaScript regex on MDN

答案 1 :(得分:2)

您可以使用此正则表达式进行拆分:

var str = '-(ab | c) & d -> (d|c)&e <-> f';
var arr = str.split(/\s*(<?->|[-&|()]|\w+)\s*/).filter(Boolean)

console.log(arr)
//=> ["-", "(", "ab", "|", "c", ")", "&", "d", "->", "(", "d", "|", "c", ")", "&", "e", "<->", "f"]

<强>解体:

\s*         # match 0 or more spaces
(           # group spart
   <?->     # match <-> or ->
   |        # OR
   [-&|()]  # match one of these symbols
   |        # OR
   \w+      # match 1 or more word chars
)           # group end
\s*         # match 0 or more spaces

答案 2 :(得分:2)

您可以使用匹配的正则表达式

/<?->|[^\s\w]|\w+/g

其中[^\s\w]匹配任何非空格或非字母字符,假设字符串不包含垃圾,否则使用

/<?->|[-()|&]|\w+/g

请参阅下面的regex demo和JS演示:

&#13;
&#13;
var re = /<?->|[-()|&]|\w+/g;
console.log("-(ab | c) & d -> (d|c)&e <-> f".match(re));
&#13;
&#13;
&#13;

模式详情

  • <?-> - 可选的< + ->
  • | - 或
  • [^\s\w] - 除空格和单词char之外的符号
    OR
  • [-()|&] - 一个符号,-()|&
  • | - 或
  • \w+ - 一个或多个单词字符。

带有全局修饰符的正则表达式的String#match获取正则表达式可以在输入字符串中找到的所有匹配值的数组。