JavaScript正则表达式。我试图抓住浮点类似的表达并避免一些

时间:2014-04-23 13:36:01

标签: javascript regex floating-point

我正在编写解析器,我需要捕获"数字"但在" e"。之前要避免使用诸如[ - +]之类的字符 我的问题是模式标记" - "或" +"在我的尾数之后,它不应该。

我使用这种模式:
/ ^ [0-9] + [ - + e.0-9] * $ /克

//Test strings:
//wrong string - match - PROBLEM, but should not be because of '-' or '+' after mantissa
1.2-
2.3-e
1.2+
1.2+e
//wrong string - does not match - OK
-123
1.2b+3
+123
-123-e9
//right string - match - OK
1
1.
1.2
123.5
.2
1.2.
.2.
1e3
.e3
1.e3
1.2e3
1.2e+3
1.2e-3
1.2e3.
1.2e3.4
1.2e-399
1.2e+e3

字符串标记为'错误'不应该抓住。
这些字符串将被分割成这样的表,但在另一个模块中 我只是想避免被我的模特抓住 1.2- // [' 1.2',' - ']
2.3-e // [' 2.3',' - ',' e']
1.2+ // [' 1.2',' +']
1.2 + e // [' 1.2',' +',' e']

您是否知道如何改进我的模式或者应该以不同的方式书写? TEST ^[.0-9]+[-+e.0-9]*$
SOLVED ^\.?\d*(\.(\d+)?)?((?:e[+-]?|[+-]e)*\d+(\.\d+)?)?\.?$

2 个答案:

答案 0 :(得分:1)

我已经为regex101测验做了一些解决方案,我想出了这个解决方案:DEMO

^[.,]?(\d)*([.,](\d+)?)?((?:e[+-]?|[+-]e)*\d+(\.\d+)?)?\.?$

编辑:由于对问题的解释不明确,因此采用secon方法。

编辑并接受最终答案:^\.?\d*(\.(\d+)?)?((?:e[+-]?|[+-]e)*\d+(\.\d+)?)?\.?$

答案 1 :(得分:0)

这个怎么样,它匹配更多,但不是一切,因为我不完全确定你的规则" (例如,当多个.好的时候?为什么1b+1没问题?为什么e+e1-e好吗?)

/^[+-]?(?:\d*\.\d+|\d+\.\d*|\d+)(?:e[+-]?(?:\d*\.\d+|\d+\.\d*|\d+))?$/g

Graphic by debuggex.com

DEMO