【问题标题】:node js, how to parse strings like this?node js,如何解析这样的字符串?
【发布时间】:2017-02-22 09:31:43
【问题描述】:

我要解析以下字符串

3693,"有毒复仇者,The (1985)",喜剧|恐怖

3693,
“有毒复仇者,(1985)”,
喜剧|恐怖。

同样,以下

161944,美国最后的砖匠 (2001),戏剧

应该被解析为

161944

美国最后的制砖师 (2001)

戏剧

我不能用逗号分隔,因为 " , " 中有一个逗号。

有效的解决方案: LS05 建议我使用“子字符串”,所以我做到了,而且效果很好。 在这里。

    var pos1 = line.indexOf(',');
    var line = line.substring(pos1+1); 

    pos1 = line.indexOf(',');
    pos2 = line.lastIndexOf(',');

    let movie_id = line.substring(0,pos1);
    let movie_tag = line.substring(pos1+1,pos2);
    let movie_timespan = line.substring(pos2+1);

感谢 LS05 :)

【问题讨论】:

  • 这是什么类型的数据?
  • 也许你可以把第一部分和最后一部分子串起来,所以标题会保留
  • @alim 哦,好吧,我的评论基于您的示例数据:)
  • @LS05 实际上你的想法是最好的,效果很好。谢谢! :)
  • @alim 好!也许您可以显示代码(或使用此策略的部分),以供您参考解决方案的过程:)

标签: javascript


【解决方案1】:

您可以使用正则表达式来解析字符串,这将排除引号内的逗号

var str = '3693,"Toxic Avenger, The (1985)",Comedy|Horror';
console.log(str.match(/(".*?"|[^",\s]+)(?=\s*,|\s*$)/g).join("\n"));

Demo(如果您想了解上述正则表达式的工作原理,请参阅学分)

就代码而言,我尝试拆分您的字符串,忽略字符串中的逗号,然后我们使用换行符\n再次加入数组项

Credits for Regex

【讨论】:

  • 这会删除行尾的,join(",\n") 可能会有所帮助
  • 它有问题。无法解析此字符串“161944,美国最后的制砖者 (2001),戏剧”。如果没有“”,则删除字符串。
  • 我又添加了一个例子。请你看看好吗!
  • @alim 您需要调整您的正则表达式 - jsfiddle.net/cc38s1a6/1 示例,但您需要调整它以使其适用于任何类型的引号
  • @alim 试试这个console.log(str.match(/(["'].*?["']|[^",\s]+)(?=\s*,|\s*$)/g).join("\n"));(虽然不是 100% 确定它是否会破坏其他东西),这将接受单引号和双引号字符串
【解决方案2】:

您可以使用 CSV 解析器,例如 papa parse,或者如果您认为不需要第三方库,您可以查看 this function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 2014-07-14
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多