JavaScript在多个定界符上分割并保留带引号的文本

时间:2018-08-05 04:32:30

标签: javascript regex

我有以下字符串...

'(!false >=stuff 300 OR 200 "TEST DATA")'

我想出了如何使用以下内容来保留引用的文本...

test.match(/\w+|"[^"]+"/g)

但是,输出不是我想要的...

[ 'false', 'stuff', '300', 'OR', '200', '"TEST DATA"' ]

有一些我需要保留的符号...

{'<', '>', '<=', '=>', '=', '!'}

这样我的拆分应如下所示...

['(', '!', 'false', '>=', 'stuff', '300', 'OR', '200', '"TEST DATA"', ')']

如何添加到我的match函数中以保留以下内容?我对regex不太满意。

1 个答案:

答案 0 :(得分:1)

您可以使用:

let str = '(!false >=stuff 300 OR 200 "TEST DATA")'

let arr = str.match(/"[^"]*"|[<>]=|[^\w\s]|\w+/g)

console.log(arr)
//=> ["(", "!", "false", ">=", "stuff", "300", "OR", "200", ""TEST DATA"", ")"]

正则表达式有以下选择:

  • "[^"]*":匹配带引号的字符串
  • [<>]=:匹配<=>=
  • [^\w\s]:匹配所有非空格,非单词字符
  • \w+:匹配任何单词