请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正则表达式的问题

match(/[(\d{2,}):(\d{2})(?:.(\d{2,3}))?]/g)里的正则表达式不能理解?为什么前面的[,后面就不用加 \ 转义符号,?匹配整个式子的话应该是/([(\d{2,}):(\d{2})(?:.(\d{2,3}))])?/g)的吧? ?:.是什么意思获取:或者获取.吗,那不是应该(?:.|:)吗?

正在回答

1回答

谢成 2020-01-10 16:33:10

?: 表示避免保存括号内的匹配结果,也可以理解成不记录子表达式的匹配结果。这里只要输出下得到的歌词格式就会知道,不需要去匹配冒号,冒号和前面的问号是一个语法。


写多了会发现,对于同样的需求,不同的人写的正则可能是不相同的,分析的角度可能不一样。


1 回复 有任何疑惑可以回复我~
  • 老师,您好!代码中(/\[(\d{2,}):(\d{2})(?:\.(\d{2,3}))?]/g)中(?:\.(\d{2,3}))这部分  ?:\.  我理解您讲解的意思是取到[03:00.880]这种.分隔的时间形式,或者[03:00:880]这种:分隔的时间形式,但实际测试中您写的 ?:\. 并不能取到:分隔的时间形式。我尝试的结果是(?::(\d{2,3})|\.(\d{2,3})),这种写法才能两种都匹配。请老师核查下我的思路,并辛苦再详细叙述下 ?:\. 这种写法的原因,谢谢老师。
    回复 有任何疑惑可以回复我~ 2021-10-07 12:49:14
  • 还有一个问题,老师在课程中说会有两个时间的存在,所以加了(\d{2,3}))?,可我理解的意思,该?放置的位置,只是对(?:\.(\d{2,3}))这部分匹配0或者1测,并没有对整个时间做匹配。辛苦老师再讲解下。如果是存在[03:00.880] [03:00.880] 这种两个时间段对一个歌词的形式,那?应该加载]之外啊,表达式应该是(/\[(\d{2,}):(\d{2})(\.(\d{2,3}))]?/g)。(PS:这里删除了上个疑惑?:\.这部分的?:)
    回复 有任何疑惑可以回复我~ 2021-10-07 12:56:48
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信