用javascript中的正则表达式解析标记

时间:2015-04-24 16:46:20

标签: javascript regex node.js

我有这个字符串:

   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函数!

2 个答案:

答案 0 :(得分:1)

如果您很高兴该字符串将始终格式良好且不会被破坏。这是一个可以做到的人:

var s = '<span data-id="a1429883480588" class="privateMessage">@zaza</span>&nbsp;';
s += '<span data-id="a1429883480589" class="privateMessage">@zaza2</span>&nbsp;';
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>&nbsp;<span data-id="a1429883480589" class="privateMessage">@zaza2</span>&nbsp;<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' ]