Javascript 编写此正则表达式的替代方法,因为它无法在除chrome以外的其他浏览器中运行
我有一个正则表达式:Javascript 编写此正则表达式的替代方法,因为它无法在除chrome以外的其他浏览器中运行,javascript,regex,Javascript,Regex,我有一个正则表达式: const str = '1.22.333'; const patt = /^(?:\d+\.?)+(?<!\.)$/; const result = str.match(patt); conststr='1.22.333'; 常量参数=/^(?:\d+\.?)+(?)? 它只适用于Chrome。在Firefox中,我得到: SyntaxError:regexp组无效 是否有其他方法编写此正则表达式,以便其他浏览器可以运行它 要求: 从数字开始 以
const str = '1.22.333';
const patt = /^(?:\d+\.?)+(?<!\.)$/;
const result = str.match(patt);
conststr='1.22.333';
常量参数=/^(?:\d+\.?)+(?)?
它只适用于Chrome。在Firefox中,我得到:
SyntaxError:regexp组无效
是否有其他方法编写此正则表达式,以便其他浏览器可以运行它
要求:
- 从数字开始
- 以数字结尾
- 用一个点分隔的数字
- 只有一个没有点的数字是有效的
您可以使用正常重复,而无需任何查找:
const str = '1.22.333';
const patt = /^(?:\d+\.)*\d+$/;
const result = str.match(patt);
console.log(result);
说明:
- 将以点结尾的数字与
\d+.
匹配,例如123.
- 重复此操作零次或多次:
123.32.12.
- 最后只匹配数字:
\d+
我已经详细讨论了在a中使用分隔符匹配数字。值得注意的是,您的初始正则表达式很容易在(?:\d+\。?)+
部分中使用分隔符
正如VLAZ所指出的,负面lookbehind((?)仅由chrome支持。
关于JS中的lookarounds的更多信息:
这匹配由两个点分隔的三个数字或一个数字。如果由点分隔的数字的计数可以是任何数字,则正则表达式将是:
/^(?:\d+\.)*\d+$/
正如@mrzasa所回答的
可以找到Regex解释
conststr='1.22.333';
常数patt=/^(?:(?:\d+\){2})?\d+$/;
常量结果=str.match(patt);
console.log(result);
正则表达式的要求是什么?您希望匹配什么?Firefox目前不支持负数lookbehinds不带点的单个数字也有效。仅适用于3或1组数字。
/^(?:\d+\.)*\d+$/