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

/((dollar|usd\$)\s*(\d+)|(\d+)\s*(dollar|usd\$))/i

但是match()返回“ 10美元”

["10 dollar", "10 dollar", undefined, undefined, "10", "dollar"]


而“美元10”

["dollar 10", "dollar 10", "dollar", "10", undefined, undefined]


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

最佳答案

您可以通过在左括号后添加(parentheses)来将正则表达式中的任何组(?:中的内容)标记为“未捕获”,如(?:non|capturing|group)所示。

因此,如果您只想要数字,而不是单词“ dollar”或“ usd”,则可以执行以下操作:

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


这将为您提供["dollar 10", undefined, "10"]“ 10美元”。从那里开始:

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

07-28 11:12