1

我正在尝试编写一个正则表达式来匹配任意长度字符的正负浮点。我想将结果存储在一个包含双值的数组中。我试过这个

input.match(/^[-+]?(\d*)\.?(\d*)$/)

例如。我的号码是 -123.432 它应该返回[-123.432,-123.432]
如果我的号码是 23.45 它应该返回[23.45,23.45]

我可以使用什么表达式来匹配负浮点和正浮点并返回结果?

4

3 回答 3

0

我不完全理解你的问题

您是否希望在array[0]and上具有与结果相同的值array[1]?这样做是没有意义的;你也可以只写一些代码来为你做这件事,而不是强迫正则表达式这样做。

但这是可能的 - 您可以通过将组放在?:开头来隐藏组,或者如果不需要它们就跳过它们。您可以通过添加更多括号来创建其他组。因此,您修改的正则表达式将如下所示:

input.match(/^([-+]?\d*\.?\d*)$/)

虽然没有意义

于 2013-09-25T10:03:45.223 回答
0

更好的正则表达式是:

/-?\d+(?:.\d+)?/

它匹配至少 1 位数字的序列,这些数字可能以-符号开头并且可能被.

您的原始正则表达式还声明这是整个字符串(因为您添加了 ^ 和 $ 符号)。如果您想从较长的文本中提取数字,则不应这样做。

提取数字后(您有浮点的字符串表示形式),您可以使用一元加号运算符将其转换为数字。之后,只需创建一个带有两次数字的数组,就完成了。

var input = '123.45';
var number = +input;
var arr = [number, number];

注意:据我所知,浮点之前的加号实际上并不属于数字,所以你不应该匹配它。+123.45不是有效的浮点数。如果您认为它有效[+-]?,请随意将开始更改为。-?

我认为无效的其他一些浮点示例:

+123
.123
-.123
123.

编辑:工作 JsBin:http ://jsbin.com/ehurAva/1/edit

于 2013-09-25T09:32:33.290 回答
0

这应该这样做:

[-+]?([0-9]*\.[0-9]+|[0-9]+)

并在此处测试 JS 的正则表达式:http ://www.regular-expressions.info/javascriptexample.html

粘贴regexp并单击show match

另外,请查看此链接以获取更多信息:浮点正则表达式

于 2013-09-25T09:29:06.803 回答