解析字符串:提取单词和短语[JavaScript]

9 javascript regex parsing

我需要在一个空格分隔的术语列表中支持精确的短语(用引号括起来).因此,用空格字符分割相应的字符串是不够的.

例:

input : 'foo bar "lorem ipsum" baz'
output: ['foo', 'bar', 'lorem ipsum', 'baz']
Run Code Online (Sandbox Code Playgroud)

我想知道这是否可以通过单个RegEx实现,而不是执行复杂的解析或拆分和重新加入操作.

任何帮助将不胜感激!

yoz*_*yoz 15

var str = 'foo bar "lorem ipsum" baz';  
var results = str.match(/("[^"]+"|[^"\s]+)/g);
Run Code Online (Sandbox Code Playgroud)

...返回你正在寻找的数组.
但请注意:

  • 包含了绑定引号,因此可以replace(/^"([^"]+)"$/,"$1")在结果中删除.
  • 引号之间的空格将保持不变.所以,如果lorem和之间有三个空格ipsum,它们就会出现在结果中.您可以通过运行replace(/\s+/," ")结果来解决此问题.
  • 如果"之后没有关闭ipsum(即错误引用的短语),您将最终得到:['foo', 'bar', 'lorem', 'ipsum', 'baz']