2014-11-06 88 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); 
相關問題