【问题标题】:Parsing comma delimited string with regex用正则表达式解析逗号分隔的字符串
【发布时间】:2016-12-03 01:45:09
【问题描述】:

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

【问题讨论】:

  • 我不知道你的观点是什么意思。无论哪种方式,您具体尝试了什么?
  • 如果^(?:[^,]*,){3}([ ]*[^ ,][^,]*),[^,]*,([ ]*[^ ,][^,]*),([ ]*[^ ,][^,]*),(\d{5}), 匹配,则通过您的测试。
  • 谢谢你!像魅力一样工作。

标签: javascript regex csv


【解决方案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.');
    }
}

【讨论】:

    【解决方案2】:

    我认为您不需要正则表达式。字符串拆分会做你想做的事: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];
    

    我将检查这些是否为空,作为读者的练习。

    【讨论】:

    • 这是很多开销。一个简单的正则表达式可能会更快。虽然split 的拼写字符较少。
    • 我认为好的代码应该是可读的。我知道我更愿意找到哪一个。
    • 可能,好的代码是主观的。如果 formatted 和扩展修饰符 /../x 一起使用,则正则表达式是可读的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多