我需要在一个空格分隔的术语列表中支持精确的短语(用引号括起来).因此,用空格字符分割相应的字符串是不够的.
例:
input : 'foo bar "lorem ipsum" baz' output: ['foo', 'bar', 'lorem ipsum', 'baz']
我想知道这是否可以通过单个RegEx实现,而不是执行复杂的解析或拆分和重新加入操作.
任何帮助将不胜感激!
var str = 'foo bar "lorem ipsum" baz'; var results = str.match(/("[^"]+"|[^"\s]+)/g);
...返回你正在寻找的数组.
但请注意:
包含了绑定引号,因此可以replace(/^"([^"]+)"$/,"$1")
在结果中删除.
引号之间的空格将保持不变.所以,如果lorem
和之间有三个空格ipsum
,它们就会出现在结果中.您可以通过运行replace(/\s+/," ")
结果来解决此问题.
如果"
之后没有关闭ipsum
(即错误引用的短语),您将最终得到:['foo', 'bar', 'lorem', 'ipsum', 'baz']