Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.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 如何将2个正则表达式模式组合成1个,并在函数中使用它_Javascript_Regex - Fatal编程技术网

Javascript 如何将2个正则表达式模式组合成1个,并在函数中使用它

Javascript 如何将2个正则表达式模式组合成1个,并在函数中使用它,javascript,regex,Javascript,Regex,我有一个正则表达式,用于检查数字是否小于15个有效数字 /^-?(?=\d{1,15}(?:[,]0+)-0*$)(?:(?=。{1,16}0*$)(?:\d+[,]\d+)‌​)).+$/ 另一个用于检查相同的数字是否达到小数点后2位(截断) /^-?(\d*\.?\d{0,2})。*/ 我几乎没有正则表达式技能 问题:我如何组合这两个正则表达式来完成两者的工作,而不仅仅是其中一个或(由|字符完成-我不确定它是否实现了与组合两者相同的功能) 比如: /^-?(?=\d{1,15}(?:[.,]

我有一个正则表达式,用于检查数字是否小于15个有效数字

  • /^-?(?=\d{1,15}(?:[,]0+)-0*$)(?:(?=。{1,16}0*$)(?:\d+[,]\d+)‌​)).+$/
  • 另一个用于检查相同的数字是否达到小数点后2位(截断)

  • /^-?(\d*\.?\d{0,2})。*/
  • 我几乎没有正则表达式技能

    问题:我如何组合这两个正则表达式来完成两者的工作,而不仅仅是其中一个或(由|字符完成-我不确定它是否实现了与组合两者相同的功能)

    比如:

    /^-?(?=\d{1,15}(?:[.,]0+)?0*$|(?:(?=.{1,16}0*$)(?:\d+[.,]\d+)‌​)).+$ <AND&&NOTOR>(\d*\.?\d{0,2}).*/
    

    /^-?(?=\d{1,15}(?:[,]0+)-0*$)(?:(?=。{1,16}0*$)(?:\d+[,]\d+)‌​)).+$ 

    如果只在第一个正则表达式中添加一个最大小数点后两位的条件,请尝试以下操作

    ^-?(?=\d{1,15}(?:[.,]0+)?0*$|(?:(?=[,.\d]{1,16}0*$)(?:\d+[.,]\d{1,2}$))).+$
    
    ,其中我仅将原始的
    \d+
    更改为
    d{1,2}$

    已编辑供reguest提取
    15个有效数字
    并捕获
    1组
    $1
    )。请尝试此功能,它被包装以捕获
    1组
    $1
    )并限制
    15个有效数字
    ,以便轻松提取

    ^(-?(?=\d{1,15}(?:[.,]0+)?0*$|(?:(?=[,.\d]{1,16}0*$)(?:\d+[.,]\d{1,2}$))).{1,16}).*$
    
    ,,其中从
    +$
    更改为
    {1,16}
    。 如果号码匹配,则可以替换。
    $1
    ,如果不匹配,则不替换任何内容,从而保持原始的不匹配号码

    因此,如果仅当您的条件满足时,才想通过用
    $1
    替换来提取
    15个有效数字
    ,请在函数中尝试此正则表达式

    ^(-?(?=\d{1,15}(?:[.,]0+)?0*$|(?:(?=[,.\d]{1,16}0*$)(?:\d+[.,]\d{1,2}$))).{1,16}).*$|^.*$
    

    ,,其中所有数字都匹配,但只有满足您条件的
    数字
    15位有效数字的格式捕获到
    $1
    ,可能与您想要得到的结果重复?。基本上,给定任何整数,它不应超过15位有效数字。给定任何小数,它应该不超过2个小数点。我正在更新我的答案以满足您的更新需求。在要求正则表达式明确您是否要检查数据是否符合模式或使用它从较大的数据(整数)中提取数据(您的15位/2位浮点数)时要小心,所需的正则表达式不是similar@Aaron如果它们不相似,则不应组合使用?建议只为每个正则表达式链接替换函数吗?谢谢。我制作了一个函数,以查看是否可以正确替换,但您的正则表达式和其他正则表达式在其他地方工作,而不是在我的函数中(
    const format1=(number,regex)=>String(number).替换(正则表达式,$1')
    )…基本上给定任何整数,它不应超过15个有效数字。给定任何小数点,它不应超过2个小数点。您是否在regex函数中设置了
    多行标志
    m
    ?我怀疑这一次出现了问题。我认为替换中引用的
    $1
    捕获组有问题。BoThm Thm Lee和我的正则表达式是为了验证而不是提取(它们被锚定);他们没有定义这样的捕获组,如果他们这样做了,那么替换将是不可操作的。像这样
    /…/m
    ?@Aaron,是的,是的。.法塔恩的函数错误地引用了
    $1
    ,因为正则表达式没有任何捕获组。因此建议法塔恩使用
    $0
    ,而不是
    $1