我现在正在重写我的一个脚本,遇到一个我无法解决的问题。 command
是一个输入变量,现在我运行了此测试(两个正则表达式都相同):
var parts = command.match(/([^\s"]+(?=\s*|$))|(".+?")/g);
console.log(command === "view -10 10 -10 10");
console.log(parts);
console.log(String("view -10 10 -10 10").match(/([^\s"]+(?=\s*|$))|(".+?")/g));
控制台现在说
true
[]
["view", "-10", "10", "-10", "10"]
这完全使我感到困惑。为什么即使使用
command
时===
等于我的测试字符串,也不会以相同的方式分开? 最佳答案
从OP
这是整个问题的解决方案:
该程序的基本结构如下
while (<condition>) {
var command = getNextCommand();
var parts = command.match(/([^\s"]+(?=\s*|$))|(".+?")/g);
processParts(parts);
}
其中
processParts()
操纵了参数:function processParts(parts) {
var foo = parts.shift();
doSomethingElse(foo);
}
这导致主例程中的
parts
缩小,并且在我的代码processParts
中实际上shift
了所有元素,导致console.log(parts)
在记录延迟时写入了一个空数组(请参阅dystroy的评论)。最重要的是,我的
processParts()
函数有一个我没有注意到的错误,这就是我将空parts
归咎于此的原因。解决了该错误后,由于我不再需要parts
了,上面的代码再次起作用了,并且可以将其缩小。总的来说,您可能想提防这一点,尽管... JavaScript会做一些奇怪的事情。