提取标签之间的所有值

时间:2014-11-06 21:54:32

标签: javascript regex

首先,我输入的XML不是很好。所以基本上我有一堆标签。如何使用javascript / Regex提取<message>标记之间的所有值?

输入:

<bad xml doc>
<a>dsda</a>
<message>hi</message>
<b></b>
<c>dsds</c>
<message>get this message too</message>

输出:

  


      也得到这个消息

3 个答案:

答案 0 :(得分:0)

var re = /<message>(.*)<\/message>/gm; 
var str = '<bad xml doc>\n <a>dsda</a>\n    <message>hi</message>\n<b></b>\n  <c>dsds</c>\n<message>get this too</message>';
var m;

while ((m = re.exec(str)) != null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    // View your result using the m-variable.
    // eg m[0] etc.
}

答案 1 :(得分:0)

jQuery实际上非常适合解析和遍历XML以及HTML。策略是使用错误的XML创建一个jQuery对象,然后使用CSS选择器进行查询。

例如,要提醒第一条消息内的文字:

var badDoc = $('<bad xml doc><a>dsda</a><message>hi</message><b></b><c>dsds</c><message>get this too</message>');
alert(badDoc.find('message')[0].innerHTML);

答案 2 :(得分:0)

您可以将match与全局标记一起使用:

var messages = text.match(/<message>(.*?)<\/message>/g).map(function (m) {
  return m.slice(9, -10);
})
console.log(messages.join('\r\n'));

var text = '<bad xml doc>\
<a>dsda</a>\
<message>hi</message>\
<b></b>\
<c>dsds</c>\
<message>get this message too</message>';

var messages = text.match(/<message>(.*?)<\/message>/g).map(function (m) {
  return m.slice(9, -10);
});

window.alert(messages.join('\r\n'));