这是脚本;:
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),
我遇到的问题是只获得费用数字,以便将它们加在一起显示总数。 (?<=\$)
似乎不起作用。所以我将表达式的其余部分分组在括号中。但是,我不确定如何获得这些组值而不是完整匹配。
答案 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);
}
这是有效的,因为RegExp
个对象有一个名为.lastIndex
的属性,它基于.exec()
次搜索。
答案 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];