2011-12-17 91 views
0

海蘭搜索,我還有很長的csv,我想搜索包含特定字詞的字符串,例如:JS正則表達式以CSV

var str = "Dan Jobsy,Google Analitis,ejobs"; 

我發現這一點:

(?:^|,)(\"(?:[^\"]+|\"\")*\"|[^,]*) 

即會解析CSV並返回單詞,我想知道如何擴展它,並添加一個條件以僅返回包含特定字符串的csv中的單詞?就像如果我搜索「OO」將返回唯一的「谷歌Analitics」,但如果我搜索「工作」,它會返回「丹Jobsy」和「ejobs」

編輯:

沒有找到這裏有一個解決方案,除了使用我提供的正則表達式的解決方案之外,如果我可以自己解決這個問題,我會在這裏發佈答案。

+1

看到[我的答案](http://stackoverflow.com/a/8497474/433790)一個非常類似的問題:[我怎樣才能解析一個CSV字符串?](http://stackoverflow.com/ q/8493195/433790) – ridgerunner 2011-12-17 19:45:17

+0

不錯,但我想要的是一種方法來搜索和返回只包含在csv項目中的關鍵字值,10+爲解釋:) – cuzzea 2011-12-18 00:20:38

回答

0
var str  = "Dan Jobsy,Google Analitis,ejobs"; 

var needle = "job"; 
var matches = []; 

for (i in A = str.match (/(\"(?:[^\"]+|\"\")*\"|[^,]+)(?=$|,)/g)) { 
    if (A[i].toLowerCase().indexOf (needle.toLowerCase()) != -1) 
    matches.push (A[i]); 
} 

console.log (matches); 

輸出

[ 'Dan Jobsy', 'ejobs' ] 
+0

這很好,但它不是通過正則表達式完成的,我想跳過 – cuzzea 2011-12-17 16:27:01

+0

的額外搜索如果你想直接輸入你的針到正則表達式的代碼將得到**非常**雜亂,你也需要逃避你的針(否則你不會搜索一個字符串,如「StackOverflow?」)。 我看不出有什麼理由爲什麼你想複雜化事情,特別是因爲你問一個問題的解決方案,你甚至不關心自己解決問題的能力。 – 2011-12-17 16:34:39

+0

我關心的是,但我不認爲我會在1-2天內找到解決方案,我瞭解上述正則表達式是如何工作的,並設法搜索一個字符串(它會返回搜索字符串,以搜索字符串開始)。問題是我有一個非常大的csv需要快速搜索,而regexp是最好的辦法做到這一點 – cuzzea 2011-12-17 16:54:07

0

String.search(模式):

匹配的RegExp用繩子,如果找到返回比賽開始的索引,-1如果不是。

但要獲得正則表達式,您需要學習一些正則表達式模式。你可以開始here或者谷歌搜索JavaScript的正則表達式教程

+0

我知道我可以研究這一點,但我搜索如果任何人都知道如何做到這一點:) – cuzzea 2011-12-17 15:50:20

+0

好吧,搜索「oo」的模式很簡單(oo)。取決於你想如何使用它雖然 – 2011-12-17 16:09:19

0

要通過一個分隔符,使用string.split(STR或正則表達式)拆分JavaScript字符串;

所以:

var str = "Dan Jobsy,Google Analitis,ejobs"; 
var ary_names = str.split(','), i = 0, ary_len = array.length, count = 0; 
for (i = 0; i < ary_len; i++){ 
    if (ary_names[i].match(/jobs/i)){ count++; } 
} 
// count is the # of times jobs was found. 

從那裏你可以使用一個循環,的indexOf,包括一個框架,等數組進行搜索的。

+0

一個CSV可能包含什麼有一個「,」作爲一個值,因此他需要比'str.split(',')更復雜的東西'' – 2011-12-17 16:12:32

+0

想一想:如果搜索字符串包含字符是正則表達式中的修飾符/運算符? – 2011-12-17 16:14:41