2013-11-15 23 views
0

我在寫javascript,我必須使用RegExp選擇一些文本。 Cheatsheets不能幫助我。html-tag entrie的RegExp

我有一個文本:

Some dummy text and nothing more.<address style='text-align: right;'><span style='color: #EA5528; font: 13px Arial !important;'>asd</span></address> 

所以我要刪除所有除了文字:地址標籤和所有的裏面是什麼。預期的結果:

Some dummy text and nothing more. 

完全沒有,但我在正則表達式的新手。

回答

1

如果您可以嵌套address標記,那麼構建正則表達式將非常困難。

如果不是,您可以用""代替"<address .*?</address>"

的Javascript:.replace(/<address .*?<\/address>/g, "");

否則,使用解析器)

一些文檔:http://www.regular-expressions.info/repeat.html,第一章 「懶惰而不是貪婪的」。

+0

'.replace(/ /g,「」)'是我想要的。很好,謝謝。 –

1

如何從HTML製作元素並選擇第一個孩子?讓你的瀏覽器做繁重:

var elem = document.createElement(); 
elem.innerHTML = "Some dummy text and nothing more.<address style='text-align: right;'><span style='color: #EA5528; font: 13px Arial !important;'>asd</span></address>"; 
console.log(elem.firstChild.nodeValue); 

jsFiddle

創建一個空的HTML元素,然後設置HTML到您所需的HTML。現在,您的瀏覽器看到了整個事情,就像這樣:

<Node> 
    Some dummy text and nothing more.<address style='text-align: right;'><span style='color: #EA5528; font: 13px Arial !important;'>asd</span></address> 
</Node> 

現在,它也打破了unrwapped文本「文本節點」。所以,你創建的是文本塊(或幾乎任何東西,是不是HTML標記)的Node元素的firstChild

一些虛擬的文本,僅此而已。

+0

它的工作原理。但是如何?你創建元素,而不是使用HTML粘貼文本,並在輸出中,我只看到文本,魔術!什麼意思'document.createElement()'沒有參數? –

+1

新增說明。我想我不應該能夠創建一個具有空tagName的元素(這是createElement的第一個參數),但它的工作原理。你可以用一個佔位符元素如:document.createElement(「span」)'輕鬆地替換它 – CodingIntrigue

0

不使用正則表達式解析HTML ...

克服的childNodes您的文字是在節點,循環,跳過地址的節點,收集的innerText剩餘的元素。

這樣的事情可能工作:

var element = document.getElementById('message'), 
    result = '', i = 0; 

for (i = 0; i < element.childNodes.length; i ++) 
{ 
    var e = element.childNodes.item(i); 
    if (e is HTMLElement && e.localName.toUpperCase() == 'ADDRESS') 
    { 
     // skip these 
    } else { 
     result += e.innerText; 
    } 
} 

請注意,這是未經測試,鍵入的文本框SO和提供來說明一個想法,不是解決世界問題。