[英]match() in javascript returns array with null strings
我需要檢測貨幣並從“ 10美元”,“ 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]
如何避免這種情況並獲得可預測的數字位置?
您可以檢查匹配的組,然后獲取必要的值。
我建議通過將交替更改為非捕獲組並刪除外部組來稍微簡化結構:
/(?:dollars?|usd\$)\s*(\d+)|(\d+)\s*(?:dollars?|usd\$)/i
看這個演示
演示測試:
var re = /(?:dollars?|usd\\$)\\s*(\\d+)|(\\d+)\\s*(?:dollars?|usd\\$)/i; var strs = ["10 dollars", "dollars 30"]; for(var t of strs) { var m = t.match(re); if (m && m[2]) console.log(m[2]); else if (m) console.log(m[1]); }
您可以在正則表達式中的任何組( (parentheses)
)標記為“非捕獲”,方法是在左側(parentheses)
添加?:
,如(?:non|capturing|group)
。
因此,如果您想要的只是數字,而不是單詞“ dollar”或“ usd”,則可以執行以下操作:
/(?:(?:dollar|usd\$)\s*(\d+)|(\d+)\s*(?:dollar|usd\$))/i
這樣就可以得到["dollar 10", undefined, "10"]
10美元["dollar 10", undefined, "10"]
。 從那里開始:
var matches = myString.match(/(?:(?:dollar|usd\$)\s*(\d+)|(\d+)\s*(?:dollar|usd\$))/i);
var amount = matches[2] || matches[1];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.