我有一个regEx用于检查一个数字少于15个有效数字,Borrowed from this SO answer
/^-?(?=\d{1,15}(?:[.,]0+)?0*$|(?:(?=.{1,16}0*$)(?:\d+[.,]\d+))).+$/
另一个用于检查相同的数字是否小于2位小数(截断)
/^-?(\d*\.?\d{0,2}).*/
我几乎有0个正则表达式技能。
问题:如何组合2个正则表达式来完成两者的工作,而不仅仅是OR(由|字符完成 - 我不确定它是否实现与组合两者相同的功能)
类似的东西:
/^-?(?=\d{1,15}(?:[.,]0+)?0*$|(?:(?=.{1,16}0*$)(?:\d+[.,]\d+))).+$ <AND&&NOTOR>(\d*\.?\d{0,2}).*/
提前致谢
编辑:编辑已移至单独的SO question
答案 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
。