任何人都知道为什么这在javascript中不起作用?(尝试使用Chrome和Firefox):
console.log('"my name is"'.match(/"?(.*?)"?/));
输出:
[""", "", index: 0, input: ""my name is""]
我期待这个:
[""my name is"", "my name is", index: 0, input: ""my name is""]
我对解决问题的替代方法不感兴趣,而且对于我想要实现的目标而言,它不是一个完整的解决方案(我现在做的方式略有不同) - 我只是对匹配失败的原因感兴趣.
我预计不情愿的量词可以匹配所有内容,但不包括最终引用.我不明白为什么表达式无法匹配任何东西?
考虑
> "foo".match(/.*?/) [""]
?
告诉正则表达式尽可能少地匹配,空字符串是最好的.同样的,
> "foo".match(/x/) null > "foo".match(/x?/) [""]
可选模式永远不会失败,并匹配其内容或空字符串.
在您的示例中,它首先匹配引号,然后将空字符串与(.*?)
(另一个)空字符串匹配"?
.由于两个测试都成功了,所以它看起来没有任何进一步的结果只是一个引用.