猿问

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

我有这个正则表达式:

  const str = '1.22.333'; 
  const patt = /^(?:\d+\.?)+(?<!\.)$/;
  const result = str.match(patt);

它仅适用于 Chrome。在 Firefox 中,我得到:

语法错误:无效的正则表达式组

https://jsbin.com/colehogema/edit?html,js,output

有没有其他方法可以编写这个正则表达式,以便其他浏览器可以运行它?

要求:

  • 从数字开始

  • 以数字结尾

  • 用一个点分隔的数字

  • 只有一个没有点的数字有效


小怪兽爱吃肉
浏览 174回答 2
2回答

慕容708150

您可以使用正常重复而无需任何环顾:&nbsp; const str = '1.22.333';&nbsp;&nbsp; const patt = /^(?:\d+\.)*\d+$/;&nbsp; const result = str.match(patt);&nbsp; console.log(result);解释:您匹配以点结尾的数字\d+\.,例如123.你重复这个零次或更多次: 123.32.12.最后你只匹配数字: \d+我在一篇关于 regex performance的博文中讨论了将数字与分隔符彻底匹配。值得注意的是,您的初始正则表达式在某种程度上容易发生灾难性的回溯(?:\d+\.?)+。正如一个 VLAZ 所指出的,负后视 ( (?<!\.)) 仅由 chrome 支持。

撒科打诨

/^(?:(?:\d+\.){2})?\d+$/这匹配由两个点分隔的三个数字或一个数字。如果由点分隔的数字计数可以是任何值,那么正则表达式将是:/^(?:\d+\.)*\d+$/正如@mrzasa在这里回答的那样。可以在此处找到正则表达式说明const str = '1.22.333';&nbsp;const patt = /^(?:(?:\d+\.){2})?\d+$/;const result = str.match(patt);console.log(result);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答