2014-11-06 89 views
0

首先,我的输入格式不正确。所以基本上我有一堆标签。我如何使用JavaScript/Regex提取<message>标记之间的所有值?提取标签之间的所有值

输入:

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

输出:


得到这个消息太

+0

哪里XML从哪里来? – 2014-11-06 21:58:01

+3

一个* malformated *文件永远不能正确解析。不要试图解决这些症状。修复原因! – dognose 2014-11-06 22:02:09

+0

它是连接成一个长字符串的错误消息,因此它包含许多xml消息以及文​​本。我只是试图把它作为一个文本输入,并使用js /正则表达式来获得标签 – gishman 2014-11-06 22:05:52

回答

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'));

+0

这只返回第一条消息。我可以将邮件连接到\ r \ n吗? – gishman 2014-11-06 22:33:22

+0

@gishman是的。只需加入想要的分隔符如'\ r \ n'即可。 – dreyescat 2014-11-06 22:39:03

+0

谢谢你dreyescat – gishman 2014-11-06 22:51:08

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. 
} 
+0

这看起来像可能工作。是否需要像第一行一样的单引号:var re ='/ (。*)<\/message>/gm'; – gishman 2014-11-06 22:17:44

+0

不,你不需要第一行的单引号。看看这个页面:http://codepen.io/anon/pen/hjsFo – Rdey 2014-11-06 22:31:00

+0

不客气......如果这解决了你的问题,那么请将问题标记为已解决。问候Rdey – Rdey 2014-11-06 22:59:28

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); 
相关问题