我正在尝试为一个以0开头的数字写一个正则表达式,但不应该与小数相匹配,例如正则表达式应与00909,050,000033
匹配,但不应与0.909
匹配。这是我使用的正则表达式:
/[0]+\d+(?!\.)/g
它有缺陷,因为它匹配0.909
,这不是我想要的。另外,如果我有0009+045*0.909
之类的字符串,则正则表达式应匹配0009
和045
,但不匹配0.909
。
我很感激任何有解决方案的人。
答案 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
^^^^^^^^
但 最安全的方式 (如果数字看起来像4.05
)是使用更复杂的模式(与{{1}一起使用)在循环中提取RegExp#exec()
值:
match[1]
请参阅regex demo
<强>详细信息:强>
/(?:^|[^\d.])(0+\d+)\b(?!\.\d)/g
- 匹配字符串开头或非数字和非点字符的非捕获组(?:^|[^\d.])
- 1+个零后跟1+个数字(整个单词)(0+\d+)\b
- 未跟随(?!\.\d)
+数字。代码:
.
&#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