使用javascript RegExp获取数字,最少2位,有时3位
如何从字符串中获取一组数字 例如:使用javascript RegExp获取数字,最少2位,有时3位,javascript,regex,Javascript,Regex,如何从字符串中获取一组数字 例如: The random number = 0.87934738749 我只需要0.87,不需要四舍五入,只需要截断 唯一需要注意的是,我想使用RegExp来实现这一点,我知道如何使用Math.pow和Math.floor以及其他方法来实现这一点,我正在尝试更好地理解正则表达式 到目前为止,我已经被引导到令人困惑的例子,RegExp不是我的东西,长度至少是2位数,但在某些情况下,它需要3位数,这是我忘记在我的原始帖子中添加的 所以尝试:- x = String(
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];
如果我将[0]从末尾去掉,则错误
无法读取null的属性“0”
或返回null
。从上面关于精度的注释(三位数的情况)中,我认为正确的答案可以是:
var rndm = 0.87934738749;
var precision = 3;
x = String(rndm).match(new RegExp("(?=(\\d+\\.\\d{2,"+precision+"}))"));
alert(x);
精度为4的示例:
请注意,x将包含结果(在上述情况下为0.879),正则表达式实际上是:
(?=(\d+\.\d{2,number}))
- (?=断言正则表达式可以匹配
- \d+匹配一到无限位数([0-9])
- .按字面意思匹配
(如果需要,还可以添加逗号规则) - \d{2,number}匹配两到number次之间的任何数字,其中number是上述情况下变量精度给出的精度
您的错误可能主要与转义正则表达式本身有关,但在任何情况下,在我看来,最好对这种情况使用断言。从上面关于精度的评论(三位数的情况),我认为正确的答案可以是:
var rndm = 0.87934738749;
var precision = 3;
x = String(rndm).match(new RegExp("(?=(\\d+\\.\\d{2,"+precision+"}))"));
alert(x);
精度为4的示例:
请注意,x将包含结果(在上述情况下为0.879),正则表达式实际上是:
(?=(\d+\.\d{2,number}))
- (?=断言正则表达式可以匹配
- \d+匹配一到无限位数([0-9])
- .按字面意思匹配
(如果需要,还可以添加逗号规则) - \d{2,number}匹配两到number次之间的任何数字,其中number是上述情况下变量精度给出的精度
您的错误可能主要与转义正则表达式本身有关,但在任何情况下,我认为,对于这种情况,最好使用断言。这听起来似乎更容易使用: 但请注意,它与正则表达式的功能不同,因为它涉及舍入。例如:
var r = 0.8796...
r.toFixed(prec) // => "0.880"
编辑:好的,误读了表示您不想舍入的部分。忽略不计。我将把它留在这里,以防有人想要舍入。这听起来更容易使用: 但请注意,它与正则表达式的功能不同,因为它涉及舍入。例如:
var r = 0.8796...
r.toFixed(prec) // => "0.880"
编辑:好的,误读了你不想舍入的部分。忽略不计。我把这个留在这里,以防有人想舍入。你说“有时三位数”是什么意思?三位数的标准是什么?无论如何,我个人会选择这样简单的:
(?=(\d+\.\d{2,3}))
在返回null
的情况下,您将以numb
和p
的形式传递什么?通常,当您要求我们为您调试某些东西时,我们需要输入和预期输出。0.87或0.879该标准并不重要,我想理解的是为什么新的RegExp用于生成正则表达式,不起作用。numb是数字,p是精度newregexp(\\d+(\\.\\d{1,“+p+”)”)
应该起作用。双转义和无正则定界符“有时3个数字”是什么意思?这三个数字的标准是什么?无论如何,我个人会选择这样简单的东西:(?=(\d+\.\d{2,3}))
在返回null
的情况下,您将以numb
和p
的形式传递什么?通常,当您要求我们为您调试某些东西时,我们需要输入和预期输出。0.87或0.879该标准并不重要,我想理解的是为什么新的RegExp用于生成正则表达式,不起作用。numb是数字,p是精度new RegExp(“\\d+(\\.\\d{1,+p+”)”)
应该起作用。双转义,没有regex分隔符