2010-09-05 40 views
2

在JavaScript中,一個流行的正則表達式的是從文本剔除HTML標籤。該代碼是HTML碼帶的regexp問題

String.prototype.stripHTML = function() { 
      var reTag = /<(?:.|\s)*?>/g; 
      return this.replace(reTag, ""); 
     }; 

如果你試試這"<b>This would be bold</b>".stripHTML(),然後將其作爲輸出"This would be bold"。它不應該輸出爲""

不這個表達式說,比賽的一切與<開始,以>結束?爲什麼沒有這個表達式開始在<b><和結束</b>>

+1

如果您使用stripHTML函數就像在PHP中一樣是一個stripTags函數。所以你輸出就好了。 – 2ndkauboy 2010-09-05 12:52:31

回答

4

您使用的是non-greedy修改。

(?:.|\s)*? 
     ^

這會導致匹配儘可能最短,而不是匹配最長匹配的默認值。

 
<b>This would be bold</b> 
^-^     ^--^  Non-greedy: <(?:.|\s)*?> 
^-----------------------^  Greedy : <(?:.|\s)*> 
1

在它不是一個貪婪的正則表達式,這意味着它匹配的第一>它橫跨來臨的時候,<b></b>是分開的比賽。

2

是的,但*?執行ungreedy比賽(簡稱賽):

var reTag = /<(?:.|\s)*?>/g; 

要執行蘆葦匹配(最長可能的匹配),刪除?

var reTag = /<(?:.|\s)*>/g;