2013-04-09 47 views
-2

我嘗試獲取除html標籤以外的所有字符串/文本。 ex。正則表達式:除TAG之外的所有東西

<html><head><title>test</title></head><body><p>hi there</p></body></html> 
--> 
"test hi there" 

首先,我試圖讓一個正則表達式查找所有的HTML標籤:(<.*?>)。之後,我嘗試反轉正則表達式((?!<.*?>).)* - 但這個表達式不起作用:( 任何人都可以幫我嗎?

+1

請參閱:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – 2013-04-09 13:49:40

+0

我編輯了你的問題來格式化它。你打破它。請查看您在工具欄中的格式化幫助! – 2013-04-09 13:50:44

+0

如果你使用的是PHP,它有一個非常好的功能'strip_tags' – 2013-04-09 13:51:17

回答

1

除了標籤之外,你應該嘗試只匹配標籤並將它們從字符串中刪除讓你的結果是遺留下來的。

var str = "<html><head><title>test</title></head><body><p>hi there</p></body></html>"; 
var res = str.replace(/(<[^>]+>)+/g, " "); 

您可能需要.replace(/\s+/g, " ")和修剪的結果,以獲得預期的輸出。


順便說一句,這是一個bad idea嘗試匹配所有使用正則表達式的HTML語法。相反,您可能需要使用DOM parser並獲取生成文檔​​的textContent

0

這是你想要的正則表達式:

>([^<]*)< 


使用正則表達式匹配,你會得到一個字符串數組。它把所有的偶數字符串放在一起(如,低於),你會得到你想要的。 For more info see this.

//This is not a real language! 
//Syntax based on Java and Javascript 

String function getHtmlText(String html) { 
String str = ""; 
String[] arr = match(html, "/>([^<]*)</"); 
Int i = arr.length; 

while(i) { 
    str += arr[i]; 
    i -= 2; //Because we want every even value 
} 

return str; 
} 

或者使用DOM元素的textContent屬性。 See this.

希望它能幫助,m93a:d

+1

怎麼樣'

一些隨機文本這裏和一些更多的文字

'。 [HTML太複雜,不能被正則表達式解析](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)。 – 2013-04-09 13:55:04

+0

不,它不會輸出「一些隨機文本和更多文本」。 – m93a 2013-04-09 14:34:39

+0

但我喜歡你發佈的問答。這是一個可憐的我不能upvote:D – m93a 2013-04-09 14:49:14

0

用下面的表達,並用一個空字符串 「」

(\<[A-Za-z =":/.]+\>)|(\</[A-Za-z]+\>) 

如果HTML標籤是

<B>Bold 
<P>This is a sample text</P> 
</B> 
<A HREF="http://www.google.com">Click Here</A> 

更換更換所有的標籤以上空字符串表達式產生以下結果

Bold 
This is a sample text 

Click Here 
+0

僅供參考,尖括號('<' and '>')在正則表達式中沒有特殊含義,不需要轉義。在某些口味中,'\ <' and '\>'匹配單詞邊界,所以通過轉義尖括號,您完全改變了它們的含義。 – 2013-04-09 18:58:47

相關問題