JavaScript正则表达式。我试图捕捉浮点sililar表达式并避免
我正在编写解析器,我需要捕捉“数字”,但要避免在“e”之前使用[-+]等字符。JavaScript正则表达式。我试图捕捉浮点sililar表达式并避免,javascript,regex,floating-point,Javascript,Regex,Floating Point,我正在编写解析器,我需要捕捉“数字”,但要避免在“e”之前使用[-+]等字符。 我的问题是,模式在尾数后面会标记“-”或“+”,但它不应该这样做。 我使用这种模式: /^[.0-9]+[-+e.0-9]*$/g 不应捕获标记为“错误”的字符串。 这些字符串将像这样拆分为表,但在另一个模块中。 我只是想避免他们被我父亲抓住。 1.2-/['1.2','-'] 2.3-e/['2.3','-','e'] 1.2+/['1.2','+'] 1.2+e/['1.2','+','e'] 你知道如何改进我的
我的问题是,模式在尾数后面会标记“-”或“+”,但它不应该这样做。
我使用这种模式:
/^[.0-9]+[-+e.0-9]*$/g 不应捕获标记为“错误”的字符串。
这些字符串将像这样拆分为表,但在另一个模块中。
我只是想避免他们被我父亲抓住。
1.2-/['1.2','-']
2.3-e/['2.3','-','e']
1.2+/['1.2','+']
1.2+e/['1.2','+','e']
你知道如何改进我的模式吗,还是应该以不同的方式编写?
^[.0-9]+[-+e.0-9]*$
^\.?\d*(\.(\d+))((?:e[+-]?[+-]e)*\d+(\.\d+)?$
这个怎么样,它匹配更多,但不是所有,因为我不完全确定你的“规则”(例如,当有多个
时可以?为什么1b+1
可以?为什么e+e
或1-e
可以?)
我对我为regex101测验做的一个解决方案做了一些调整,并提出了以下解决方案:
^[,]?(\d)*([,](\d+)?((?:e[+-]?|[+-]e)*\d+(\.\d+)?\。?$
编辑:第二种方法,因为问题的解释不清楚
编辑并接受最终答案:^\.?\d*(\.(\d+))((?:e[+-]?[+-]e)*\d+(\.\d+)?$
多个
或e
都可以,因为我稍后将在其他模块中测试匹配字符串,该模块返回错误标志或不返回标志<代码>e+e
或1-e
或1+e
正常。我知道它不会搜索精确的浮动,但我想温和地处理这样的错误。你是怎么画这个图的,在哪里?我只需要避免匹配字符串,比如1.2-2.3-e1.2+1.2+e
,它在尾数后包含[-+]
(例如1.2
),任何与这个RegExp匹配的东西在JavaScript中都是合法的数字文字(这就是为什么我没有编辑它以符合你的e+e
类型)。它将匹配+x
,-x
或只是x
,其中x
是.1
,1.
,1
,然后可选地匹配后缀,后缀开头是e
,后面是+y
,-y
或只是y
(y
规则与x
相同)几乎完成,但//良好-未标记
不应匹配,例如-123+123-123-e9 1.2b+3
。它们是错误的,因为第一、第二、第三个从-
或+
开始,最后一个包含b
-错误。另一个问题:就像我做的那样,但没有那些//好-没有标记为错误的标记?编辑后,现在它们不匹配。这既好又复杂;)但它是有效的,谢谢你!给我一点时间核对一下保罗的答案。我重新编辑了您的答案:^\.?\d*(\.(\d+))((?:e[+-]?|[+-]e)*\d+(\.\d+)?\。$
因为我的应用程序中有错误。无论如何,干得好。
//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
/^[+-]?(?:\d*\.\d+|\d+\.\d*|\d+)(?:e[+-]?(?:\d*\.\d+|\d+\.\d*|\d+))?$/g