在字符串中查找两个数字

时间:2014-11-26 11:10:11

标签: javascript regex dynamics-crm-2013

这是我之前提出的问题的后续内容,可以在这里找到

Link For Previous Question

我发布了一个新问题,因为我得到的答案是正确的,但我的下一个问题是如何更进一步

基本上我有一串数据,在这个数据中某处会有以下内容;

Width = 70
Void = 40 

实际数字可能在1-440之间。

从我之前的问题我发现如何使用正则表达式识别这两个数字并将它们放入单独的字段中,但是,我现在的问题是该字符串可以包含例如

Part Number = 2353

Length = 3.3mm

Width = 70

Void = 35

Discount = 40%

我的问题是;

我如何识别Width + Void并将它们分成两个单独的字段,我之前的问题中的答案不会解决这个问题,因为在这个例子中我会有一个大小为4的数组,我会只需选择第2和第3空间。

这不适合我的问题,因为数组的长度因字符串而异,因此我需要一种特定的识别方法

Width = ##
Void = ##

从那里可以单独检索数字以放入我的单独字段

我在CRM Dynamics中使用JavaScript

3 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式以任何顺序将输入与WidthVoid匹配:

/(\b(Width|Void) += *(\d+)\b)/

RegEx Demo

您的变量名称和值在捕获的组中可用。

答案 1 :(得分:1)

Width\s+=\s+(\d+)|Void\s+=\s+(\d+)

你可以尝试一下。抓住捕获。参见演示。

http://regex101.com/r/oE6jJ1/31

var re = /Width\s+=\s+(\d+)|Void\s+=\s+(\d+)/igm;
var str = 'Part Number = 2353\n\nLength = 3.3mm\n\nWidth = 70\n\nVoid = 35\n\nDiscount = 40%';
var m;

while ((m = re.exec(str)) != null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}

答案 2 :(得分:1)

一个更简单的选择是将整个字符串转换为一个对象,并从该对象中获取所需的内容。

str = "Part Number = 2353\n" +
"Length = 3.3mm\n" +
"Width = 70\n" +
"Void = 35\n" +
"Discount = 40%\n";

data = {};

str.replace(/^(.+?)\s*=\s*(.+)$/gm, function(_, $1, $2) {
    data[$1] = $2;
});

alert(data['Width']);