用正则表达式解析逗号分隔的字符串

时间:2016-07-28 15:07:20

标签: javascript regex csv

我需要用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上测试了一些没有运气的例子。甚至没有接近所需要的东西。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分: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.');
    }
}

答案 1 :(得分: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];

我留下检查这些不是空的,作为读者的练习。