使用javascript RegExp获取数字,最少2位数,有时3位数

时间:2016-04-21 16:27:04

标签: javascript regex

如何从字符串中获取一定数量的数字?

例如:

The random number = 0.87934738749

我需要的只是0.87没有舍入,只是被截断。

唯一需要注意的是,我想使用RegExp执行此操作,我知道如何使用Math.pow和Math.floor以及其他方法执行此操作,我正在尝试更好地理解正则表达式。

到目前为止,我被引导到令人困惑的例子,RegExp不是我的东西,长度至少是2位数,但在某些情况下,它需要是3位数,这就是我忘了添加到我原来的交。

所以尝试: -

x = String(numb).match( new RegExp("/\d+(\.\d{1,"+p+"})?/") )[0];

错误Cannot read property '0' of nullnull返回,如果我将[0]放在最后。

2 个答案:

答案 0 :(得分:0)

从上面关于精度的评论(三位数的情况),我认为正确答案可以是这个:

var rndm = 0.87934738749;
var precision = 3;

x = String(rndm).match(new RegExp("(?=(\\d+\\.\\d{2,"+precision+"}))"));

alert(x);

精度为4的示例:https://jsfiddle.net/edz4crc8/

注意x将包含结果(在上面的情况下为0.879),正则表达式实际上是:

(?=(\d+\.\d{2,number}))
  • (?=断言正则表达式可以匹配
  • \ d +匹配一个到无限数字([0-9])
  • 。字面上匹配.(如果需要,您也可以添加逗号规则)
  • \ d {2,number}匹配两个和数字次之间的任何数字,其中number是上述情况下变量precision给出的精度。

你的错误可能主要是逃避正则表达式本身,但无论如何,在我看来,最好使用断言来解决这种情况。

答案 1 :(得分:0)

这听起来好像使用toFixed()实现更简单:

var r = 0.8793...
var prec = 3
r.toFixed(prec) // => "0.879"

但请注意,它与正则表达式不同,因为它涉及舍入。例如:

var r = 0.8796...
r.toFixed(prec) // => "0.880"

编辑:好的,误读了你说不想想要回合的部分。漠视。我把它留在这里,万一有人想要四舍五入。