V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
igoist
V2EX  ›  前端开发

前端正则表达式的规则是不是变更过了?

  •  
  •   igoist ·
    igoist · 2020-04-14 18:56:46 +08:00 · 1428 次点击
    这是一个创建于 1690 天前的主题,其中的信息可能已经有所发展或是发生改变。

    MDN 上对于 RegExp 的 Description 底部如此写到:

    For example, the following are equivalent:

    let re = /\w+/ let re = new RegExp('\w+')

    起因是今天修了个 bug,项目中某页面有一堆按钮

    这些按钮的类名都类似于 goto-aaa goto-bbb goto-ccc

    写于 16 年的代码是通过 btn.className.match(/goto-(\S+)/)[1] 来匹配获取到 aaa 、bbb 、ccc

    以前应该是没问题的,如今就同 'goto-aaa'.match(/goto-(\S+)/) 匹配结果为 null 一样,会直接报错

    调整为 'goto-aaa'.match(/goto-(\S+)/)[1] 就可以解决问题

    但还是挺好奇的,想看看有没有经常在用在关注正则这块的大佬帮忙解解惑,是不是真的有变更,以及要是变更了,

    除 \ 和 \ 外,还有哪些变更,在哪里可以看到,谢谢!

    3 条回复    2020-04-15 09:51:01 +08:00
    autoxbc
        1
    autoxbc  
       2020-04-14 19:22:06 +08:00
    Web 一向是渐进的,不会有破坏性的变更

    楼主贴的
    For example, the following are equivalent:
    let re = /\w+/ let re = new RegExp('\w+')

    MDN 实际是这么写的
    For example, the following are equivalent:
    let re = /\w+/
    let re = new RegExp('\\w+')

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp


    >> 写于 16 年的代码是通过 btn.className.match(/goto-(\S+)/)[1] ...
    >> 调整为 'goto-aaa'.match(/goto-(\S+)/)[1] 就可以解决问题

    这两个正则不是完全一样?
    igoist
        2
    igoist  
    OP
       2020-04-15 09:46:40 +08:00
    @autoxbc

    对的,这俩是一样的,我本来就是复制过来有换行,发出来之后变了空格

    不好意思的是上面被我贴错了

    原来的代码一直都是 btn.className.match(/goto-(\\S+)/)[1]
    igoist
        3
    igoist  
    OP
       2020-04-15 09:51:01 +08:00
    @autoxbc

    “除 \ 和 \ 外” 其实我发的时候也是一个但斜杠 还有一个双斜杠,文本被过滤了,当时没考虑到,发完也没仔细看,闹笑话了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   928 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:35 · PVG 05:35 · LAX 13:35 · JFK 16:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.