javascript中的match()返回带有空字符串的数组

javascript中的match()返回带有空字符串的数组,javascript,regex,Javascript,Regex,我需要检测货币并从诸如“10美元”、“10美元”等字符串中提取数字。我使用String.prototype.match()和regex /(美元\$)\s*(\d+)(\d+)\s*(美元\$)/i 但是match()以“10美元”的价格返回我 “10美元” 我如何避免这种情况并获得可预测的数字位置 您可以检查匹配的组,然后获取必要的值 我建议通过将交替转换为非捕获组并移除外部组来稍微简化结构: /(?:dollars?|usd\$)\s*(\d+)|(\d+)\s*(?:dollars?|us

我需要检测货币并从诸如“10美元”、“10美元”等字符串中提取数字。我使用String.prototype.match()和regex

/(美元\$)\s*(\d+)(\d+)\s*(美元\$)/i

但是match()以“10美元”的价格返回我

“10美元”


我如何避免这种情况并获得可预测的数字位置

您可以检查匹配的组,然后获取必要的值

我建议通过将交替转换为非捕获组并移除外部组来稍微简化结构:

/(?:dollars?|usd\$)\s*(\d+)|(\d+)\s*(?:dollars?|usd\$)/i

演示测试:

var re=/(?:美元?|美元\$)\s*(\d+)(\d+)\s*(?:美元?|美元\$)/i;
风险价值标准利率=[“10美元”,“30美元];
用于(strs的var t){
var m=t.匹配(re);
如果(m&m[2])
console.log(m[2]);
else if(m)console.log(m[1]);

}
您可以检查匹配的组,然后获取必要的值

我建议通过将交替转换为非捕获组并移除外部组来稍微简化结构:

/(?:dollars?|usd\$)\s*(\d+)|(\d+)\s*(?:dollars?|usd\$)/i

演示测试:

var re=/(?:美元?|美元\$)\s*(\d+)(\d+)\s*(?:美元?|美元\$)/i;
风险价值标准利率=[“10美元”,“30美元];
用于(strs的var t){
var m=t.匹配(re);
如果(m&m[2])
console.log(m[2]);
else if(m)console.log(m[1]);
}
您可以通过在左括号后添加
?:
将正则表达式中的任何组(在
(括号)
)标记为“非捕获”,如
(?:非捕获|组)

因此,如果您只需要数字,而不是“美元”或“美元”,您可以:

/(?:(?:dollar|usd\$)\s*(\d+)|(\d+)\s*(?:dollar|usd\$))/i
这将为您提供
[“10美元”,未定义,“10”]
“10美元”。从那里开始,只需:

var matches = myString.match(/(?:(?:dollar|usd\$)\s*(\d+)|(\d+)\s*(?:dollar|usd\$))/i);    
var amount = matches[2] || matches[1];
通过在左括号后添加
?:
,可以将正则表达式中的任何组(括号中的事物)标记为“非捕获”,如
(?:非捕获组)

因此,如果您只需要数字,而不是“美元”或“美元”,您可以:

/(?:(?:dollar|usd\$)\s*(\d+)|(\d+)\s*(?:dollar|usd\$))/i
这将为您提供
[“10美元”,未定义,“10”]
“10美元”。从那里开始,只需:

var matches = myString.match(/(?:(?:dollar|usd\$)\s*(\d+)|(\d+)\s*(?:dollar|usd\$))/i);    
var amount = matches[2] || matches[1];

您可以检查哪一组匹配。超级简单
/(\d+)\(美元)美元(\d+)/gi
您可以检查哪一组匹配。超级简单
/(\d+)\(美元)美元(\d+)/gi