我有这个字符串:
s='data-id="a1429883480588" class="privateMessage" @zaza
data-id="a1429883480589" class="privateMessage" @zaza2
data-id="a1429883480598" class="privateMessage" @zaza3'
我的目标是捕获以下内容:data-id =“和”以获得结果: [a1429883480588,a1429883480589,a1429883480598]
我试过
var splitted = s.match(/data-id="(\w)+(?=")/g)
但这也捕获了data-id =“和”
关于如何编写此正则表达式的任何想法?
必须使用JS来完成,因为它是nodeJS函数!
答案 0 :(得分:1)
如果您很高兴该字符串将始终格式良好且不会被破坏。这是一个可以做到的人:
var s = '<span data-id="a1429883480588" class="privateMessage">@zaza</span> ';
s += '<span data-id="a1429883480589" class="privateMessage">@zaza2</span> ';
s += '<span data-id="a1429883480598" class="privateMessage">@zaza3</span>';
s.match(/data-id="\w+"/g).map(function(attributeAndValue) {
return attributeAndValue.split('"')[1];
})
上面提到的关于使用RegEx解析HTML的问题是有效的,但对于HTML来说更有效。
答案 1 :(得分:1)
这里是cheerio等价物,仅供参考或其他
var cheerio = require('cheerio');
var markup = '<span data-id="a1429883480588" class="privateMessage">@zaza</span> <span data-id="a1429883480589" class="privateMessage">@zaza2</span> <span data-id="a1429883480598" class="privateMessage">@zaza3</span>';
var $ = cheerio.load('<div>'+markup+'</div>');
var ids = Array.prototype.map.call($('[data-id]'), function(e) {
return $(e).attr('data-id');
});
console.log(ids);
// [ 'a1429883480588', 'a1429883480589', 'a1429883480598' ]