将曾经是列表的字符串拆分

3
我有这段代码:
var lines = this.result.split('\n');
for (var line = 0; line < lines.length; line++) {
    console.log(lines[line]);
    var sublines = lines[line].split(' ');
    for (var subline = 0; subline < sublines.length; subline++) {
        console.log(sublines[subline]);
    }
}

我希望它可以从字符串中提取标记,然后解析每个标记中的整数,但似乎split(" ") 不适用于此!以下是我看到的内容:

(0, (u'5643145391', u'11367866245'))

这段代码被记录了两次,这意味着没有分离。在我的真实数据中,具有大数字的列表长度为150,但这不应该成问题。如何拆分这部分(部分Unicode)字符串?

jsFiddle可以重现这个问题。然而,似乎这个示例只打印了一次字符串,没有注明这条消息被打印了多少次。


期望输出为,每次迭代一行:
0
5643145391
11367866245

但任何类似的东西都会被赞赏。

你能提供你期望的输出吗?我不太明白你想要达成什么目标。 - Harry Bomrah
它没有进入循环,因为没有\n,所以一开始就是空数组。 - Harry Bomrah
同@HarryBomrah,已更新.. - gsamaras
是的,@HarryBomrah,谢谢! - gsamaras
完全没有问题 :) - Harry Bomrah
显示剩余2条评论
2个回答

3
这似乎是一个可以使用RegExp的有用技术。
(                              // begin capture group
  -?                           // match 0 or 1 minus sign
  \d{1,}                       // match 1 to unlimited digits
)                              // end capture group

var line = "(0, (u'5643145391', u'11367866245'))", 
    regex = /(-?\d{1,})/g;

console.log( line.match(regex) );


这取决于你实际上想用它来做什么。 我把它提供给console.log来显示它。 使用line.match(regex).forEach(console.log)在此Stack片段之外执行相同的操作。 - jdphenix
据我所知,String.prototype.match自古以来就存在了。这相当奇怪... - jdphenix
没问题,是我的错。你能解释/教我一下这个正则表达式吗?你是怎么想出来的呢? :) - gsamaras
我花了相当多的时间将邪恶的政府数据文件转换成稍微不那么邪恶的政府数据文件。这只是对它们进行大量实践的结果。 - jdphenix
值得!;) 只解释一下-?,我不太明白你的评论。。:/ - gsamaras
显示剩余8条评论

2
你可以先将字符串中所有不是数字的字符替换为一个空格,然后按照空格进行分割。
var lines = document.getElementById("demo");
var lines = lines.innerText;
lines = lines.replace(/[^0-9\.]+/g, ' ');
lines =  lines.trim();
res = lines.split(' ');
console.log(res);

或者在一行中

lines.replace(/[^0-9\.]+/g, ' ').trim().split(' ');

我也更喜欢另一个答案,更加优雅。 - naortor

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