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

2020-04-14 18:56:46 +08:00
 igoist

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] 就可以解决问题

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

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

1450 次点击
所在节点    前端开发
3 条回复
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
2020-04-15 09:46:40 +08:00
@autoxbc

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

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

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

“除 \ 和 \ 外” 其实我发的时候也是一个但斜杠 还有一个双斜杠,文本被过滤了,当时没考虑到,发完也没仔细看,闹笑话了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/662389

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX