有人知道为什么这在 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?/)
[""]
可选模式永远不会失败,并且匹配其内容或空字符串。
在您的示例中,它首先匹配引号,然后匹配空字符串与 (.*?)
和(另一个)空字符串与 "?
。因为两者测试成功,它不再进一步查看,结果只是一个引用。
关于javascript - 这个正则表达式有什么问题 - 与不情愿的量词有关吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20972121/