我有一個像下面的Javascript:用逗號分割的字符串,但忽略引號逗號
var str="A,B,C,E,'F,G,bb',H,'I9,I8',J,K"
我想拆就逗號的字符串的字符串。但是,如果單引號內有東西,我需要它忽略逗號,如下所示。
A
B
C
E
F,G,bb
H
I9,I8
J
K
我有一個像下面的Javascript:用逗號分割的字符串,但忽略引號逗號
var str="A,B,C,E,'F,G,bb',H,'I9,I8',J,K"
我想拆就逗號的字符串的字符串。但是,如果單引號內有東西,我需要它忽略逗號,如下所示。
A
B
C
E
F,G,bb
H
I9,I8
J
K
> str.match(/('[^']+'|[^,]+)/g)
["A", "B", "C", "E", "'F,G,bb'", "H", "'I9,I8'", "J", "K"]
雖然你要求這個,你可能不佔角情況下,例如:
'bob\'s'
就是'
被轉義的字符串a,',c
a,,b
a,b,
,a,b
a,b,'
',a,b
',a,b,c,'
上述一些由這個正確處理的;其他人不是。我強烈建議人們使用一個經過深思熟慮的庫,以避免現在或未來(如果您擴展您的代碼或其他人使用它)避免諸如安全漏洞或微妙錯誤等事情。
說明正則表達式的:
('[^']+'|[^,]+)
- 意味着比賽要麼'[^']+'
或[^,]+
'[^']+'
意味着報價......一個或更多的非報價...報價。[^,]+
意味着一個或更多的非逗號注:通過消耗加引號的字符串之前引用的字符串,我們作出的加引號的字符串的情況下更容易的解析。
** + 1 **請你解釋它是如何工作的? – gdoron
謝謝,它適合我。您提到的情況不會影響我 –
@gdoron:'('[^'] +'| [^,] +)' - 表示「匹配''[^'] +''或'[^,] +' 」。 ''[^'] +''表示「引用......一個或多個非引號......引用」。 '[^,] +'表示「一個或多個非逗號」。 – ninjagecko
這是我的版本可以使用單引號和雙引號,並且可以嵌入多個帶逗號的引號字符串。它給出了空的結果,並且它們太多了,所以你必須檢查它。沒有經過嚴格的測試。請原諒過度使用'\'。
var sample='this=that, \
sometext with quoted ",", \
for example, \
another \'with some, quoted text, and more\',\
last,\
but "" "," "asdf,asdf" not "fff\',\' fff" the least';
var it=sample.match(/([^\"\',]*((\'[^\']*\')*||(\"[^\"]*\")*))+/gm);
for (var x=0;x<it.length;x++) {
var txt=$.trim(it[x]);
if(txt.length)
console.log(">"+txt+'<');
}
使用此
var input="A,B,C,E,'F,G,bb',H,'I9,I8',J,K";
//Below pattern will not consider comma(,) between ''. So 'I9,I8' will be considered as single string and not spitted by comma(,).
var pattern = ",(?=([^\']*\'[^\']*\')*[^\']*$)";
//you will get acctual output in array
var output[] = input.split(pattern);
儘管這段代碼可能會解決這個問題,包括一個解釋[真的有幫助](// meta.stackexchange.com/q/114762)來提高您的帖子的質量。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –
的可能重複的[Javascript代碼解析CSV數據](http://stackoverflow.com/questions/1293147/javascript-code-to-parse-csv-data ) – stema