Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript RegExp获取数字,最少2位,有时3位_Javascript_Regex - Fatal编程技术网

使用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分隔符