为了账号安全,请及时绑定邮箱和手机立即绑定

编写此正则表达式的替代方法,因为它无法在 chrome 以外的其他浏览器中运行

编写此正则表达式的替代方法,因为它无法在 chrome 以外的其他浏览器中运行

小怪兽爱吃肉 2021-10-21 14:20:39
我有这个正则表达式:  const str = '1.22.333';    const patt = /^(?:\d+\.?)+(?<!\.)$/;   const result = str.match(patt);它仅适用于 Chrome。在 Firefox 中,我得到:语法错误:无效的正则表达式组https://jsbin.com/colehogema/edit?html,js,output有没有其他方法可以编写这个正则表达式,以便其他浏览器可以运行它?要求:从数字开始以数字结尾用一个点分隔的数字只有一个没有点的数字有效
查看完整描述

2 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

您可以使用正常重复而无需任何环顾:


  const str = '1.22.333'; 

  const patt = /^(?:\d+\.)*\d+$/;

  const result = str.match(patt);

  console.log(result);


解释:


您匹配以点结尾的数字\d+\.,例如123.

你重复这个零次或更多次: 123.32.12.

最后你只匹配数字: \d+

我在一篇关于 regex performance的博文中讨论了将数字与分隔符彻底匹配。值得注意的是,您的初始正则表达式在某种程度上容易发生灾难性的回溯(?:\d+\.?)+。


正如一个 VLAZ 所指出的,负后视 ( (?<!\.)) 仅由 chrome 支持。


查看完整回答
反对 回复 2021-10-21
?
撒科打诨

TA贡献1934条经验 获得超2个赞

/^(?:(?:\d+\.){2})?\d+$/

这匹配由两个点分隔的三个数字或一个数字。如果由点分隔的数字计数可以是任何值,那么正则表达式将是:


/^(?:\d+\.)*\d+$/

正如@mrzasa在这里回答的那样。


可以在此处找到正则表达式说明


const str = '1.22.333'; 

const patt = /^(?:(?:\d+\.){2})?\d+$/;

const result = str.match(patt);

console.log(result);


查看完整回答
反对 回复 2021-10-21
  • 2 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信