簡體   English   中英

JavaScript中的match()返回具有空字符串的數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM