数字的正则表达式以0开头但不是小数

时间:2016-04-16 17:47:52

标签: javascript regex

我正在尝试为一个以0开头的数字写一个正则表达式,但不应该与小数相匹配,例如正则表达式应与00909,050,000033匹配,但不应与0.909匹配。这是我使用的正则表达式:

/[0]+\d+(?!\.)/g 

它有缺陷,因为它匹配0.909,这不是我想要的。另外,如果我有0009+045*0.909之类的字符串,则正则表达式应匹配0009045,但不匹配0.909

我很感激任何有解决方案的人。

4 个答案:

答案 0 :(得分:0)

您可以使用以下正则表达式来实现您想要的内容,

/^0[0-9]+/g

以上将选择此模式中的数字

  • 字符串应以0开头。
  • 然后是一个或多个连续数字。

上面提到的正则表达式也可以写成,

/^0\d+/g

答案 1 :(得分:0)

/\D*(0\d+?)\D*/g

这将提取您的模式的所有实例,可以$ 1 ... $ 9

答案 2 :(得分:0)

您可以尝试在模式的开头添加单词边界(demo):

/\b0+\d+\b(?!\.)/g
 ^^

请参阅正则表达式演示。但是,它也无法匹配最后一个点之前句子末尾的数字。然后,在.后面跟一个数字:

之前,使用更精确的前瞻来使匹配失败
/\b0+\d+\b(?!\.\d)/g
         ^^^^^^^^ 

请参阅this regex demo

最安全的方式 (如果数字看起来像4.05)是使用更复杂的模式(与{{1}一起使用)在循环中提取RegExp#exec()值:

match[1]

请参阅regex demo

<强>详细信息:

  • /(?:^|[^\d.])(0+\d+)\b(?!\.\d)/g - 匹配字符串开头或非数字和非点字符的非捕获组
  • (?:^|[^\d.]) - 1+个零后跟1+个数字(整个单词)
  • (0+\d+)\b - 未跟随(?!\.\d) +数字。

代码:

&#13;
&#13;
.
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您所要做的就是限制边界与不匹配 之前和之后的点或数字。中间将有效。

在捕获组1中回答。

(?:^|[^\d.])(0\d+)(?![\d.])

 (?: ^ | [^\d.] )          # BOS or not digit nor dot
 ( 0 \d+ )                 # (1), Number that starts with 0
 (?! [\d.] )               # Not digit nor dot