2011-03-14 93 views
1

我需要在下面的正則表達式上進行擴展,以便它還選擇具有類的代碼>標籤,例如<。 < code class =「lol」>正則表達式幫助替換<html>標籤

var text = 'This is <i>encoded text</i> but this is <b>bold</b >!'; 
var html = $('<div/>') 
    .text(text) 
    .html() 
    .replace(new RegExp('&lt;(/)?(b|i|u)\\s*&gt;', 'gi'), '<$1$2>'); 

任何人都可以幫忙嗎?

我猜想像&lt;(/)?(b|i|u|code|pre)?(class="")\\s*&gt;

非常感謝

+9

不要使用正則表達式解析HTML/XML。爲什麼不使用jQuery的操縱器呢? – 2011-03-14 17:45:02

回答

3

解析與正則表達式的HTML是一個壞主意,看到這個answer

最簡單的方法是簡單地使用一些jQuery的dom操作函數來刪除格式化。

$('<div/>').find("b, i, code, code.lol").each(function() { 
    $(this).replaceWith($(this).text()); 
}); 

jsfiddle代碼示例。

0

我不會使用正則表達式來解析標記,但如果它只是一個字符串片段,這樣的東西就足夠了。應該指出,你使用的正則表達式使用\ s *來負擔過重。它的可選形式可以通過開銷並替換完全相同的東西。最好使用\ S +

正則表達式:<(/?(?:b|i|u)|code\s[^>]+class\s*=\s*(['"]).*?\2[^>]*?)\s+>
取代:<$1>
修飾符:sgi

<      # < Opening markup char 
    (      # Capture group 1 
     /?      # optional element termination 
     (?:      # grouping, non-capture 
      b|i|u     # elements 'b', 'i', or 'u' 
     )       # end grouping 
    |       # OR, 
     code      # element 'code' only 
     \s [^>]*     # followed by a space and possibly any chars except '>' 
     class \s* = \s*   # 'class' attribute '=' something 
     (['"]) .*? \2   # value delimeter, then some possible chars, then delimeter 
     [^>]*?     # followed by possibly any chars not '>' 
    )      # End capture group 1 
    \s+      # Here need 1 or more whitespace, what is being removed 
>      # > Closing markup char 
1

這一切替換整個標籤在它(包括類,ID等):

.replace(new RegExp('&lt;(/)?(b|u|i|code|pre)(.*?)&gt;', 'gim'), '<$1$2$3>'); 

Mathing一個代碼標籤與類編碼字符串是公頃當代碼標籤爲固定格式時(<code class="whatever">),很容易:

.replace(new RegExp('&lt;(?:(code\\sclass=".*?")|(/)?(b|u|i|code|pre)(?:.*?))&gt;', 'gim'), '<$1$2$3>');