检索正则表达式匹配组值

时间:2015-05-07 17:05:48

标签: javascript arrays regex

这是脚本;:

var output = []
output = this.getField("SelectedSoftware").value.match(/\$(\d{1,4}\.\d\d)/g);

来自该字段的示例文本:

Automate,Audition($ 500.00),Citrix Receiver,AutoCAD($ 54.93),Clarity Studio($ 748.23),Audacity($ 300.00),Audition($ 500.00),Business Objects仪表板,试镜($ 500.00),

我遇到的问题是只获得费用数字,以便将它们加在一起显示总数。 (?<=\$)似乎不起作用。所以我将表达式的其余部分分组在括号中。但是,我不确定如何获得这些组值而不是完整匹配。

3 个答案:

答案 0 :(得分:1)

RegExp.exec(string)应该非常有帮助。实际上,这是从字符串中获取捕获组的唯一方法。但实现有点困难,因为.exec()只返回一个结果。

示例代码:

var regex = /\$(\d{1,4}\.\d\d)/g,
    text = this.getField("SelectedSoftware").value,
    prices = [],
    total = 0,
    num;

// Assignments always return the value that is assigned.
// .exec will return null if no matches are found.
while((val = regex.exec(text)) !== null){
  // Capture groups are referenced with 'val[x]', where x is the capture group number.
  num = parseFloat(val[1]);
  total += num;
  prices.push(num);
}

Here's a fiddle.

这是有效的,因为RegExp个对象有一个名为.lastIndex的属性,它基于.exec()次搜索。

你可以read more about .exec() on the MDN

答案 1 :(得分:0)

  

我只获得了成本数字,因此可以将它们加在一起显示总数。 String.prototype.match   总是返回一个你想要的数组。

查看完整的DEMO

var output = []
output = "Automate, Audition ($500.00), "
         +"Citrix Receiver, AutoCAD ($54.93), "+
         +"Clarity Studio ($748.23), Audacity "
         +"($300.00), Audition ($500.00), Business "
         +"Objects Dashboard, Audition ($500.00),"
        .match(/\$(\d{1,4}\.\d\d)/g);

输出:

["$500.00", "$54.93", "$748.23", "$300.00", "$500.00", "$500.00"]

现在您只需使用此正则表达式/(\d{1,4}\.\d\d)/g添加所有数字。

获取这些值的总和:

var total = 0;
for(var _=0; _<output.length; _++)
    total += parseFloat(output[_]);

请参阅OUTPUT 2603.16

答案 2 :(得分:0)

您可以使用(?: )创建非捕获组,但在这种情况下我认为您不需要它。

MDN: Working with regular expressions

  

exec :一种RegExp方法,用于搜索字符串中的匹配项。   它返回一组信息。
测试:测试的RegExp方法   用于字符串中的匹配。它返回true或false。
匹配:一个字符串   执行搜索字符串中匹配项的方法。它返回一个   信息数组或不匹配时为null。
搜索:一种String方法   测试字符串中的匹配项。它返回匹配的索引,   如果搜索失败,则返回-1。
替换:执行。的String方法   在字符串中搜索匹配项,并替换匹配的子字符串   使用替换子字符串。
拆分:使用a的String方法   正则表达式或固定字符串将字符串分解为数组   子串。

您需要的是RegExp.exec,它将返回一组信息表单,您可以从中获取捕获的组。

它返回一个数组,其中包含[0]中的整个匹配项,然后是以下数组槽中的每个捕获组。所以你想要的是:

var price = /\$(\d{1,4}\.\d\d)/.exec("$59.99")[1];