Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式。我试图捕捉浮点sililar表达式并避免_Javascript_Regex_Floating Point - Fatal编程技术网

JavaScript正则表达式。我试图捕捉浮点sililar表达式并避免

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'] 你知道如何改进我的

我正在编写解析器,我需要捕捉“数字”,但要避免在“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