我有这个正则表达式: 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 支持。
撒科打诨
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);
添加回答
举报
0/150
提交
取消