为正整数和负整数,浮点数组成正则表达式

时间:2018-01-14 10:38:15

标签: javascript regex

为整数,浮点数,负整数撰写regexp

从这样的字符串:2-1+7*-777/-0.001+0.99我需要得到一个数组:

["2", "1", "7", "-777", "-0.001", "0.99"].

我正在尝试使用此代码:

var str = "2-1+7*-777/-0.001+0.99";
var array = str.match(/(?:\*|\/|\+|\-)(-\d+(\.\d+)?)|(\d+\.\d+)|(\d+)/g);

但问题是结果是:

["2", "1", "7", "*-777", "/-0.001", "0.99"]

特别关注*-777/-0.001

在此数组中的负数之前,我不需要操作符号。只有负数(带“ - ”)和正数(没有“+”)浮点数和整数。

我不需要在'2-1'中匹配'-1',但我需要在'2 * -1'中匹配'-1'。

此外,我需要一种不仅适用于Chrome的解决方案。

这不是Matching regex for positive and negative numbers with floating point

的欺骗

我试图从计算术语中解析数字。我需要在数字 ONLY 之前得到负号,如果它们在分组/或乘法*后出现。链接的答案正则表达式可以执行此操作,它会找到所有负数。

(编辑:P.Artner从评论到我提出的解决方案)

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

(?:[*/](-[\d.]+))|([\d\.]+)

Regex Demo



const regex = /(?:[*/](-[\d.]+))|([\d\.]+)/g;
const str = `2-1+7*-777/-0.001+0.99`;
let m;

while ((m = regex.exec(str)) !== null) {

if(m[1]!=null)
console.log(m[1]);
else if(m[2]!=null)
console.log(m[2]);

}


//["2", "1", "7", "-777", "-0.001", "0.99"].