我正在与Node制作交互式应用程序(显然)需要用户输入。我有那么多工作,但有些输入有空格,.split(' ')
调用会搞乱。
正在发生的事情的例子:
> foo "hello world" bar
['foo','"hello','world"','bar']
我想要发生什么:
> foo "hello world" bar
['foo','hello world','bar']
我试过寻找一个npm包,但没有运气。
编辑:我知道我可以使用正则表达式,但我不知道正确的序列是什么。
答案 0 :(得分:3)
您可以使用 match()
console.log(
'foo "hello world" bar'.match(/"[^"]+"|\w+/g)
)
如果您想避免使用"
,请将捕获的群组正则表达式与 exec()
var str = 'foo "hello world" bar';
var reg = /"([^"]+)"|\w+/g,
m, res = [];
while (m = reg.exec(str))
res.push(m[1] || m[0])
console.log(res);
答案 1 :(得分:-1)
如果你不想使用正则表达式,你可能会喜欢
'foo "hello world" bar'.replace('"',"").split(" ");
或确保包含单引号输入案例,您可以使用简单的正则表达式,如下所示
console.log('foo "hello world" bar'.replace(/("|')/g,"").split(" "));
好吧,这是我对正则表达式的修正。这个只会捕获引号之间的文本,不包括引号而不使用任何捕获组。由于我们不使用任何捕获组,因此可以使用简单的String.prototype.match()
方法一次性解析所需的键数组,而无需循环。
[^"]+(?="(\s|$))|\w+
var reg = /[^"]+(?="(\s|$))|\w+/g,
str = 'baz foo "hello world" bar whatever',
arr = str.match(reg);
console.log(arr);