[英]Find Value in CSV with Regex
我試圖確定一個CSV字符串是否包含一個特定的數字(也是字符串),在這種情況下是數字3.我寫了一些腳本來嘗試這個但結果總是返回null。 正則表達式在使用在線測試工具時起作用,但是在通過腳本使用時則不行。 誰能確定我錯過了什么?
這是我的代碼:
var csv = ["1,25,3","3", "1", "1,9,10", "2,4,5,6,7,11,33,3", "2,1,2,12,15,27"];
function contains(param){
var regex = /(,)?\D[3]\D(,)?/g;
return param.match(regex);
}
for(var i = 0; i < csv.length; i++){
console.log(contains(csv[i]));
}
或者如果您願意: JsFiddle
問題是你的模式在你的3
之前和之后需要一個角色( \\D
)。 由於您的示例中的所有3
位於字符串的末尾,因此第二個\\D
永遠不會匹配。 你想要的可能是這樣的:
var regex = /(?:^|\D)3(?!\d)/;
對於字符串的結尾,我們使用負向前瞻。 這斷言沒有數字。 這比聲明存在非數字字符更好(因為它也適用於字符串的結尾)。 理想情況下,我們會在開頭使用相同的內容,但JavaScript不支持。 所以我們說,要么是字符串的開頭,要么是非數字字符。 實際上(正如Brad Koch指出的那樣),在這種特定情況下,兩個條件構成一個詞邊界( [a-zA-Z0-9_]
一個字符與一個不是字符串或字符串末尾的字符之間的位置)。 所以你可以簡單地使用:
var regex = /\b3\b/;
但是 ,如果您的輸入可以包含除數字和逗號之外的其他字符(例如1,text,2,a3b,somemoretext
),則這些方法都不夠。 相反,您需要明確檢查逗號:
var regex = /(?:^|,)3(?![^,])/;
此外,由於您不需要實際匹配,但只想知道是否匹配,您可以使用test
代替:
return regex.test(param);
這將為您提供一個布爾值而不是一個數組(這可能也會提高效率)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.