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

Parsing comma delimited string with regex

本文关键字:分隔 字符串 正则表达式      更新时间:2023-09-26

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

这是我使用sln的代码。它使用regex从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.');
    }
}

我认为您不需要regex。字符串拆分可以随心所欲: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];

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