javascript - 这个正则表达式有什么问题 - 与不情愿的量词有关吗?

标签 javascript regex reluctant-quantifiers

有人知道为什么这在 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/

相关文章:

javascript - 为什么 Three.js 在 NetBeans IDE 中不起作用?

javascript - 需要帮助理解 .getJSON() 行为

python - 正则表达式 : replace the suffix of a string ending in '.js' but not 'min.js'

javascript - 为什么我的 jquery 调用显示为未定义?

javascript - 背景图像转换在 Firefox 中不起作用 (-moz-)

java - 勉强量词行为的原因??在 Java 正则表达式中

regex - 完全贪婪/不情愿 X{n} 之间的区别?

php - 如何preg_match所有数字而不是url编码的逗号

regex - 表情符号 NSTextStorage