Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 编写此正则表达式的替代方法,因为它无法在除chrome以外的其他浏览器中运行_Javascript_Regex - Fatal编程技术网

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+$/