如何从js中的字符串中提取每个整数或浮点数(正数或负数)

Posted

技术标签:

【中文标题】如何从js中的字符串中提取每个整数或浮点数(正数或负数)【英文标题】:How can I extract each integer or float (positive or negative) from a string in js 【发布时间】:2021-03-24 21:25:26 【问题描述】:

这是我的代码。它仍然返回null,我不知道为什么!

var tName = "18.56x^2   -   5.45x  -3.78";
abc = tName.replace(/x/g, "").replace("^2", "").replace(/\s/g, "");
console.log(abc);

$re = "/-?\\d+(?:\\.\\d+)?/m";
$str = abc.toString();
console.log($str.match($re));

【问题讨论】:

只是提示您可以使用https://regex101.com/ 来调试您的正则表达式 ***.com/questions/10003683/… 这可能会有所帮助 另外$str = abc.toString(); 是不必要的 【参考方案1】:

您的正则表达式很好,您只需将其设置为字符串而不是正则表达式文字。

当您构建 RegExp 常量时,您想要使用 RegExp() 构造函数(用于从字符串构建)或只是一个正则表达式文字。您当前正在构建一个 看起来 像正则表达式但实际上不是的普通字符串。

尝试将此行编辑为以下内容:

$re = /-?\d+(?:\.\d+)?/m;

编辑:

要访问字符串本身,您只需要使用索引 0。

var mat = $str.match($re);
console.log(mat[0])

【讨论】:

谢谢它的工作,但是我没有得到我想要的我认为我的正则表达式不正确...... 我得到:['18.56',索引:0,输入:'18.56-5.45-3.78',组:未定义] 是的,这是一个“匹配对象”,尝试在末尾添加 [0] 以引用匹配的字符串。【参考方案2】:

你需要

不引用正则表达式 AND 不要转义\d AND 添加全局标志

试试这个

const $re = /-?\d+(?:\.\d+)?/mg,
      tName = "18.56x^2   -   5.45x  -3.78",
      abc = tName.replace(/x/g, "").replace("^2", "").replace(/\s/g, ""),
      nums = [...abc.matchAll($re)].map(m => m[0]);
console.log(abc)
console.log(nums)

【讨论】:

【参考方案3】:

使用正则表达式(不是字符串)作为String.prototype.match() 的参数,如下所示:

var tName = "18.56x^2   -   5.45x  -3.78";
abc = tName.replace(/x/g, "").replace("^2", "").replace(/\s/g, "");

$re = /-?\d+(?:\.\d+)?/m;
$str = abc.toString();
console.log($str.match($re));

【讨论】:

以上是关于如何从js中的字符串中提取每个整数或浮点数(正数或负数)的主要内容,如果未能解决你的问题,请参考以下文章

将类型指定为数字列表(整数和/或浮点数)?

Haskell:读取一个数字(整数或浮点数)

将 strlen() 与数组整数或浮点数一起使用 [重复]

正则表达式从逗号分隔列表中删除连续重复(整数和/或浮点数)

ruby 转换由浮点分隔的逗号分隔的数字整数或浮点数

将具有 1.185 亿欧元或 6 万欧元等货币值的 pandas 列转换为整数或浮点数 [关闭]