【问题标题】:regular expression in javascript for negative floating point number result stored in arrayjavascript中的正则表达式用于存储在数组中的负浮点数结果
【发布时间】:2013-09-25 09:15:48
【问题描述】:

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

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

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

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

【问题讨论】:

  • 据我正确理解您的问题,您当前的正则表达式应该可以找到正确的数字。您只需将它们手动放入数组中。不过,我建议您将正则表达式更改为 "^[-+]?\d+[\.\d]\d*$"
  • 嗨迈克尔,感谢您的回复,但是这个 input.match() 返回一个数组值,在你的情况下它不能按我的意愿工作,它只给出 [23.45] 我需要数组 [23.45,23.45 ]

标签: javascript


【解决方案1】:

应该这样做:

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

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

粘贴您的regexp 并点击show match

另外,请查看此链接以获取更多信息:FLOATING POINT REGEX

【讨论】:

  • 您好,我之前也尝试过。但它留下了负值。 [-23.45,23.45] 需要 [-23.45,-23.45]
  • 嗨。感谢您的帮助:)我还有一个疑问,我在“RegExp.$1”之后取值可以取负值吗?因为我正在尝试这样做但它无法接受,请帮助。
  • @Ben10 不明白你的意思。
  • if (input.match(/[-+]?([0-9]*\.[0-9]+|[0-9]+)/)) { this_item.setValue (ezSystem.ezcall("EZUtil.printf", '%1%2', RegExp.$1.length == 0 ? '0' : RegExp.$1, RegExp.$2.length == 0 ? '' : '.' .concat(RegExp.$2))); } 这里在 RegExp.$1 中没有出现负值,而我正在尝试如果我取 -23.45,它将 RegExp.$1 作为 23.45 IDK 为什么。请帮助:)
【解决方案2】:

我不太明白你的问题

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

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

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

没有意义

【讨论】:

  • 嗨 Adassko,感谢您的帮助 :) 我还有一个疑问,我在“RegExp.$1”之后取值可以取负值吗?因为我正在尝试这样做但它无法接受,请帮助。
  • 你能给我看一些你想要做什么的代码示例吗?
  • if (input.match(/[-+]?([0-9]*\.[0-9]+|[0-9]+)/)) { this_item.setValue (ezSystem.ezcall("EZUtil.printf", '%1%2', RegExp.$1.length == 0 ? '0' : RegExp.$1, RegExp.$2.length == 0 ? '' : '.' .concat(RegExp.$2))); } 这里在 RegExp.$1 中没有出现负值,而我正在尝试如果我取 -23.45,它将 RegExp.$1 作为 23.45 IDK 为什么。请帮助:)
  • 那是因为符号不在括号内。每个$N 变量对应于从左数括号中指示的特定匹配组。您可以只使用$_ 而不是$1 来获得包含符号的整个匹配
【解决方案3】:

更好的正则表达式是:

/-?\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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多