2017-08-12 38 views
0

我想用我的字符串「」(逗號),但我的字符串有一些特殊的情況下,請幫我如何拆分我在Javascript字符串的特殊情況

input : a,"d,e,f",g //string in csv` 

    var myarray=str.spilt(","); 

輸出:myarray[0] = a ,myarray[1]="d ,myarray[3]=e,myarray[4]=f.....

所需的輸出:myarray[0] =a ,myarray[1]="d,e,f",myarray[2] = g

請幫我... 感謝

+0

是''a,「d,e,f」,g「'真的是字符串嗎? – Stuart

+0

你的字符串的來源是什麼?我認爲你需要一個解析器來處理這個問題。 –

+0

其字段來自csv文件 –

回答

1

小非正則表達式,迭代和慢的方法:

var result = [], tmp="", inString = false; 
str.split("").forEach(function(char){ 
    inString = inString != (char === '"'); 
    if(!inString && char === ","){ 
    result.push(tmp); 
    tmp = ""; 
    }else{ 
    tmp+=char; 
    } 
}); 
result.push(tmp); 

In action

你也可以使用A R用於循環而不是forEach:

for(char of str){ /*...*/ } 

然而,這就是你。

+0

我仍然不明白爲什麼人們downvote沒有說出什麼是錯的:/ –

-1

可以清理CSV與添加分隔符「,以創建n個新聞專欄。這是在Excel中,但我不知道你如何解析這些數據,所以可能不適合你。或者str_replace()他們然後str.split

+0

應該如何替換'''工作,如果結果應該是'['a','d,e,f','g']'的形式的數組? –

0

你需要使用regexp

var str = 'a,"d,e,f",g'; 
 
console.log(str.split(/,"|",/));

+0

這隻適用於特殊'',''或'',''將成爲分隔符的情況。但是根據評論,OP正在尋找一種解決方案,引用的列可以出現在該行的任何位置。 –

+0

當你問爲什麼你不告訴所有情況下 –

+0

我的答案是基於你的論點 –

0
myarray = [] 
while (str) { 
    start = str; 
    str = str.replace(/(".*?"|[^",]+|)($|,)/, function(match, group1) { 
     myarray.push(group1); 
     return ""; 
    }); 
    if (str == start) break; 
} 

上面的代碼通過CSV字符串,將它可以添加到數組myarray的每個值。如果值爲",因爲它的第一個字符(可能包含逗號),它將匹配,直到達到下一個關閉"。否則,正則表達式只會查找下一個逗號。如果發現某個值沒有關閉,則會自動停止,並且myarray將包含所有失敗的值。空值(兩個相鄰的逗號)也將起作用。

+0

不適用於更長的行,如OP在評論'704-wew-9494 ,「ds daf 787,erwerwe,NC 28134」,,,, 4/22/2013,5/1/2017,01, –

+0

我在其中添加了一個逗號,所以現在它正確匹配空值。除此之外,它似乎用給定的字符串爲我工作。 – ChristianFigueroa

2

在JS中使用mapcat操作符會更順暢。

let input = 'a,"d,e,f",g' 
var result = [] 
input.split('"').forEach((e, i) => { 
    result = result.concat(i % 2 == 0 ? e.split(',') : e) 
}) 
result = result.filter(e => e != "") 

由於ChristianFigueroa指出:這不會對在報價不環繞整場情況下工作:value,val"ue", "value"

然而,如果不是對你很重要: jsperf/speedtest

+0

如果值中包含引號,則位不是第一個字符。 (例如value,val「ue,」value「)。沒有規則說明報價不能出現在其中一個值內 – ChristianFigueroa

+0

好的方法!但不是結果而是被* string/not string *分割?例如」a + b'」 –

相關問題