簡體   English   中英

使用Regex以CSV格式查找值

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

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