javascript中的match()返回带有空字符串的数组
我需要检测货币并从诸如“10美元”、“10美元”等字符串中提取数字。我使用String.prototype.match()和regexjavascript中的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
/(美元\$)\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