我正在重写我的一个脚本,遇到了一个我无法弄清楚的问题。 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
在使用===
时等于我的测试字符串时,不会以相同的方式分离?
答案 0 :(得分:1)
来自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做了一些奇怪的事情。