正则表达式可从计算中验证和提取数据

时间:2019-02-12 03:49:08

标签: javascript regex

我正在尝试找出一个正则表达式,我可以在其中验证输入并从输入中提取所需的信息。

我的输入包含一个简单的计算,例如加,减,乘和除。

  

例如:如果输入是附加内容,请说 7.01 + 9.05

var input = '7.01+9.05';

var pattern = /^-?\d+\.?\d+[-+*\/]-?\d+\.?\d+$/
var sign;
if (input.match(pattern)) {
    var matches = pattern.exec(input);

    var left = // logic to extract value 7.01 using matches variable;
    var right = // logic to extract value 9.05 using matches variable;
    var sing = // logic to extract symbol + using matches variable;
}

我使用了从这篇文章中找到的正则表达式:Calculator Regular Expression with decimal point and minus sign

您能帮我如何从上述代码中提取所需的数据吗?

3 个答案:

答案 0 :(得分:1)

您可以使用split()

var input = '7.01+9.05';

var pattern = /^-?\d+\.?\d+[-+*\/]-?\d+\.?\d+$/
if (input.match(pattern)) {
    var matches = pattern.exec(input)[0].split(/(\+|-|\*|\/)/);

    var left = matches[0];
    var right = matches[2];
    var sign = matches[1];
    console.log(left,sign,right);
}

答案 1 :(得分:1)

当然!

您应使用()|在正则表达式中定义捕获组。为您的正则表达式定义全局标志以捕获所有组非常重要。

您需要捕获三件事:

  • 左边的数字-> ^-?\d+\.?\d+
  • 标志-> [-+*\/]
  • 正确的号码-> -?\d+\.?\d+$

您应该使用|交替形式来使正则表达式使用捕获组,例如a或语句。

最终的正则表达式为:

var pattern = /(^-?\d+\.?\d+)|([-+*\/])|(-?\d+\.?\d+$)/g

输出结果将是一个数组,其中第一个位置为左数,第二个位置为符号,第三个位置为右数。

因此,其余代码如下所示:

if (input.match(pattern)) {
    var matches = input.match(pattern); \\ I recommend use input.match here too

    var left = matches[0];
    var right = matches[2];
    var sing = matches[1];
}

答案 2 :(得分:1)

在模式^-?\d+\.?\d+[-+*\/]-?\d+\.?\d+$中,您想使用\d+\.?\d+来匹配一个可选的点,但这种方法有效,但是由于使用{{1 }},因此1 + 1不匹配。

如果只是简单的计算,您可以做什么,您可以使用3个捕获组,并使用\d+将数字与可选的小数部分匹配

您的模式可能如下:

?\d+(?:\.\d+)?

说明

  • ^(-?\d+(?:\.\d+)?)([-+*\/])(-?\d+(?:\.\d+)?)$ 字符串的开头
  • ^捕获组1,将1个以上的数字与可选的小数部分相匹配
  • (-?\d+(?:\.\d+)?)捕获组2,与字符类中列出的任何一个匹配
  • ([-+*\/])捕获组2,将1个以上的数字与可选的小数部分相匹配
  • (-?\d+(?:\.\d+)?)字符串结尾

请参见regex101 demo

例如

$