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

 会说话的鱼911 发布于 2023-02-06 08:27

任何人都知道为什么这在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""]

我对解决问题的替代方法不感兴趣,而且对于我想要实现的目标而言,它不是一个完整的解决方案(我现在做的方式略有不同) - 我只是对匹配失败的原因感兴趣.

我预计不情愿的量词可以匹配所有内容,但不包括最终引用.我不明白为什么表达式无法匹配任何东西?

1 个回答
  • 考虑

    > "foo".match(/.*?/)
    [""]
    

    ?告诉正则表达式尽可能少地匹配,空字符串是最好的.同样的,

    > "foo".match(/x/)
    null
    > "foo".match(/x?/)
    [""]
    

    可选模式永远不会失败,并匹配其内容或空字符串.

    在您的示例中,它首先匹配引号,然后将空字符串与(.*?)(另一个)空字符串匹配"?.由于两个测试都成功了,所以它看起来没有任何进一步的结果只是一个引用.

    2023-02-06 08:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有