2016-07-28 164 views
-3

我需要用JavaScript解析逗號分隔的字符串。該字符串是從CSV文件中提取的。該字符串將被\ r \ n,\ n或\ r分割。第一行是標題。使用正則表達式分析逗號分隔的字符串

var str = 'firstname,middlename,lastname,address1,address2,city,st,zip,Custom01,Custom02,Custom03,Custom04,Custom05,Custom06,Custom07,Custom08,Custom09,Custom10,Custom11,Custom12,Custom13,Custom14,Custom15,Custom16,Custom17,Custom18,Custom19,Custom20 \n K,,P,123 ST,,CENTENNIAL,CO,80122-3011,,,,,,,,,,,,,,,,,,,, \n K,,P,123 ST,,AURORA,CO,80013-2355,,,,,,,,,,,,,,,,,,,, \n K,,P,123 ST,,LAKEWOOD,CO,80228-5332,,,,,,,,,,,,,,,,,,,,'; 

我需要做兩件事。

  • 確保address1,city,st和zip不爲空。
  • 確保zip只有5個數字。

在沒有任何運氣的情況下測試了regext101.com上的一些示例。甚至沒有接近需要的東西。任何幫助,將不勝感激。謝謝!

+0

我不知道你的觀點是什麼意思。你有什麼特別的嘗試,無論哪種方式? – nicael

+2

如果這個'^(?:[^,] *,){3}([] * [^,] [^,] *),[^,] *,([] * [^,] [^ ] *),([] * [^,] [^,] *),(\ d {5}),'匹配它通過您的測試。 – sln

+0

謝謝sln!像魅力一樣工作。 – Kim

回答

0

我不認爲你需要正則表達式。字符串分割會做你想要什麼:w3schools

var str = 'firstname,middlename,lastname,address1,address2,city,st,zip,Custom01,Custom02,Custom03,Custom04,Custom05,Custom06,Custom07,Custom08,Custom09,Custom10,Custom11,Custom12,Custom13,Custom14,Custom15,Custom16,Custom17,Custom18,Custom19,Custom20 \n K,,P,123 ST,,CENTENNIAL,CO,80122-3011,,,,,,,,,,,,,,,,,,,, \n K,,P,123 ST,,AURORA,CO,80013-2355,,,,,,,,,,,,,,,,,,,, \n K,,P,123 ST,,LAKEWOOD,CO,80228-5332,,,,,,,,,,,,,,,,,,,,'; 

var str_parts = str.split(','); 

var address1 = str_parts[3]; 
var city = str_parts[5]; 
var street = str_parts[6]; 
var zip = str_parts[7]; 

我已經離開檢查,這些都不是空作爲練習留給讀者。

+0

這是一個很大的開銷。一個簡單的正則表達式可能會更快。雖然'split'拼寫的字符較少。 – sln

+0

我認爲好的代碼應該是可讀的。我知道我寧願找到哪一個。 –

+0

可能_良好的code_是主觀的。如果[格式化](http://www.regexformat.com)與擴展修飾符'/../ x'一起使用,正則表達式是可讀的 – sln

1

這是我使用的代碼,感謝sln。它使用正則表達式使用我原始問題中列出的條件從csv文件中通過逗號分隔的字符串進行解析。

for (i = 1; i < rows.length; i++) { 
    var sample = rows[i].match(/^(?:[^,]*,){3}([^,]+),[^,]*,([^,]+),([^,]+),(\d{5})/gm); 
    if (sample === null) { 
     alert('Either the address1, city, st, or zip is blank. Or zip is more then 5 digits.'); 
    } 
} 
相關問題