2014-09-01 167 views
0

我正在使用Javascript上的RegEx,這裏是我卡住的地方。如何替換兩個符號之間所有出現的字符串?

我有一個簡單的字符串像

<html><body><span style=3D"font-family:Verdana; color:#000; font-size:10pt;= 
"><div><font face=3D"verdana, geneva" size=3D"2">http://72.55.146.142:8880/= 
order003.png.zip,120</body></html> 

所有我需要做的是寫javascript可以與「<」和「>」符號替換所有字符串。

我寫了這樣的事情 -

var strReplaceAll = Body; 
var intIndexOfMatch = strReplaceAll.indexOf("<"); 

while (intIndexOfMatch != -1){ 

    strReplaceAll = strReplaceAll.replace(/<.*>/,'') 

    intIndexOfMatch = strReplaceAll.indexOf("<"); 
} 

但問題是,如果體內含有 -

test<abc>test2<adg> 

它會給我 -

test 

僅或者如果體內含有像 -

<html>test<abc>test2<adg> 

它會給我什麼,請讓我知道我可以GET-

testtest2 

爲最終輸出。

+2

[''Java'!='JavaScript'](http://stackoverflow.com/a/245069/1393766)。無論如何,你可能應該閱讀貪婪和不情願的量詞。 – Pshemo 2014-09-01 13:16:10

+3

使用HTML解析器。 – SLaks 2014-09-01 13:16:42

+0

是簡單的字符串包含換行符? – 2014-09-01 13:16:51

回答

2

試試這個正則表達式來代替:

<[^>]+> 

DEMO:

http://regex101.com/r/kI5cJ7/2

討論

放在一個字符串中的HTML代碼,並應用到這個字符串的正則表達式。

var htmlCode = ...; 
htmlCode = htmlCode.replace(/<[^>]+>/g, ''); 

原正則表達式花費太多字符(*是一個貪婪的運營商)。

查看此頁面關於Repetition with Star and Plus,特別是關於的部分「注意貪婪!

大多數剛接觸正則表達式的人都會嘗試使用<.+>。當他們在像This is a <EM>first</EM> test這樣的字符串上進行測試時,他們會感到驚訝。您可能會希望正則表達式匹配<EM>,並在匹配後繼續使用</EM>

但它沒有。正則表達式將匹配<EM>first</EM>。顯然不是我們想要的。

+0

雖然這樣做,但它是基於HTML標籤中缺少''> 。解析HTML意味着你永遠不會明白 - 請參閱' Unihedron 2014-09-01 13:37:57

1
/(<.*?>)/ 

只要使用它。用""替換所有的事件。

See demo.

相關問題