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

时间:2018-04-17 12:15:20

标签: javascript regex

我有一个regEx用于检查一个数字少于15个有效数字,Borrowed from this SO answer

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

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

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

      类似的东西:

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

      提前致谢

      编辑:编辑已移至单独的SO question

1 个答案:

答案 0 :(得分:1)

如果您只向第一个正则表达式添加最多2位小数的一个条件,请尝试此操作..

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

Demo ,,,其中我只将原始\d+更改为d{1,2}$

已编辑,以便提取15 significant figures并捕获group 1$1)。尝试将其包裹起来,以便轻松捕获group 1$1)和有限15 significant figures

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

Demo ,,,其中.{1,16}更改为.+$。 如果数字匹配,则可以替换为$1,但如果不是,则替换为空,因此保持原始的不匹配数字。

因此,如果您只想在满足条件时通过替换15 significant figures来提取$1,请尝试将此正则表达式用于您的函数。

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

Demo ,,,其中所有数字都匹配,但the numbers satisfying your condition仅以$1的格式捕获15 significant figures