Node.js:如何解析类似这样的字符串?

5
我想解析以下字符串:
3693,“Toxic Avenger,The(1985)”,喜剧|恐怖
转换为:
3693, “Toxic Avenger,The(1985)”, 喜剧|恐怖。
同样地,以下内容:
161944,“The Last Brickmaker in America(2001)”,戏剧
应该被解析为:
161944 The Last Brickmaker in America(2001) 戏剧。
由于“,”内部有一个逗号,因此我无法通过逗号分割来完成它。
可行的解决方案: LS05建议我使用“substring”,所以我这样做了,它完美地工作了。 在这里。
    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的支持 :)

这是什么类型的数据? - Mihai Alexandru-Ionut
1
也许你可以对第一个和最后一个部分进行子字符串操作,这样标题就会保留。 - LS05
@alim 哦,好的,我根据你的样本数据发表了我的评论 :) - LS05
@LS05,你的想法实际上是最好的,效果很棒。谢谢! :) - arslan
@alim 很好!也许你可以展示一下代码(或使用这个策略的部分),以供解决方案的参考 :) - LS05
在问题后放置解决方案。 :) - arslan
2个回答

7
您可以使用正则表达式解析字符串,这将排除在引号内部的逗号。
var str = '3693,"Toxic Avenger, The (1985)",Comedy|Horror';
console.log(str.match(/(".*?"|[^",\s]+)(?=\s*,|\s*$)/g).join("\n"));

演示 (如果您想了解上述正则表达式的工作原理,请参考信用部分)

就代码而言,我尝试忽略字符串中的逗号来拆分您的字符串,稍后我们将使用换行符 \n 再次连接数组项。

正则表达式的信用


这将删除行末的,join(",\n") 可能会有所帮助。 - RaR
它有一个问题。无法解析这个字符串“161944,The Last Brickmaker in America(2001),Drama”。如果没有“”,则删除字符串。 - arslan
我添加了一个例子,您能否请检查一下! - arslan
@alim 你需要调整你的正则表达式 - https://jsfiddle.net/cc38s1a6/1/ 这个例子,但你需要调整它,使其适用于任何类型的引号。 - Mr. Alien
@alim 试试这个 console.log(str.match(/(["'].*?["']|[^",\s]+)(?=\s*,|\s*$)/g).join("\n")); (不过不能保证它不会影响其他部分),这个代码可以接受单引号和双引号括起来的字符串。 - Mr. Alien

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接