我正在尝试编写一个正则表达式来匹配任何长度字符的正浮点和负浮点。我想将结果存储在一个带有双精度值的数组中。我试过这个
input.match(/^[-+]?(d*).?(d*)$/)
例如。我的号码是-123.432,它应该返回[-123.432,-123.432]
如果我的数字是 23.45,它应该返回[23.45,23.45]
我可以使用什么表达式来匹配负浮点和正浮点并返回该结果?
这应该可以:
[-+]?([0-9]*.[0-9]+|[0-9]+)
并在此处测试JS的正则表达式:http://www.regular-expressions.info/javascriptexample.html
粘贴您的regexp
并单击 show match
.
另外,请查看此链接以获取更多信息: 浮点正则表达式
我不完全明白你的问题
您是否希望在array[0]
和array[1]
上具有相同的值?这样做毫无意义;你也可以写一些代码来为你做这件事,而不是强迫正则表达式这样做。
但这是可能的 - 您可以通过在组的开头放置?:
来隐藏组,或者在不需要时跳过它们。只需添加更多括号即可创建其他组。所以修改后的正则表达式将如下所示:
input.match(/^([-+]?d*.?d*)$/)
虽然没有意义
正则表达式是:
/-?d+(?:.d+)?/
它匹配至少 1 位数字的序列,这些序列可能以-
符号开头,并可能被.
您的原始正则表达式还声明这是整个字符串(因为您向其添加了 ^ 和 $ 符号(。如果你想从较长的文本中提取数字,你不应该这样做。
提取数字(具有浮点数的字符串表示形式(后,可以使用一元加运算符将其转换为 Number。之后,只需创建一个带有数字两次的数组,你就完成了。
var input = '123.45';
var number = +input;
var arr = [number, number];
注意:据我所知,浮点数之前的加号实际上不属于数字,所以你不应该匹配它。 +123.45
不是有效的浮点数。如果您认为有效,请随意将开头更改为[+-]?
而不是-?
。
我认为其他一些浮点数示例无效:
+123
.123
-.123
123.
编辑:工作 JsBin:http://jsbin.com/ehurAva/1/edit