我需要检测货币并从诸如“ 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];