Javascript 按空格拆分字符串,忽略嵌套字符串中的空格

Javascript 按空格拆分字符串,忽略嵌套字符串中的空格,javascript,Javascript,目前,我可以像这样拆分字符串: "1 2 3".split(' ') // [ "1", "2", "3" ] "1 2 3 'word'".split(' ') // [ "1", "2", "3", "'word'" ] 有没有办法避免在嵌套字符串中的空格上拆分 例如: "1 2 3 'word one'".split(' ') // want output of [ "1", "2", "3", "'word one'" ] "1 2 3 \"word one\"".split(' ')

目前,我可以像这样拆分字符串:

"1 2 3".split(' ') // [ "1", "2", "3" ]
"1 2 3 'word'".split(' ') // [ "1", "2", "3", "'word'" ]
有没有办法避免在嵌套字符串中的空格上拆分

例如:

"1 2 3 'word one'".split(' ') // want output of [ "1", "2", "3", "'word one'" ]
"1 2 3 \"word one\"".split(' ') // want output of [ "1", "2", "3", "\"word one\"" ]

我希望输出
[“1”、“2”、“3”、“word one'”
,而不是
[“1”、“2”、“3”、“word”、“one'”)
(即,如果空格在字符串中,我希望忽略空格)。

一种方法可以与解释引号内空格的正则表达式一起使用:

var s=“1 2 3”单词一“一”二“你好世界”;

log(s.match(/'[^']+'|“[^”]+“|\w+/g));
遍历字符串,并保留一个布尔标志,以确定是否在引号内

if(string[i] == ' ' && !insideQuotes) //split

要正确匹配包含附加引号字符的字符串,在匹配引号中的子字符串时,请将
+?
重复,否则将重复字符串,如

1 "2" "3"
无法正确匹配。此外,除非您可以指望所有匹配只包含单词字符,否则最好使用
\S
(它将匹配除空白字符以外的任何字符):

var s=`1“2”3“foo”bar`

console.log(s.match(/'.+?'|“+?”|\s++/g))
如果以后字符串包含更多的引号字符,这将匹配得太多,例如
1“2”3“
\w
也假定为单词字符,但情况可能并非如此。