2011-09-28 79 views
1

我想要採取一些解析XML數據,搜索標籤的實例並替換該標籤(以及任何可能在字體標籤內),以及用一個簡單的標籤替換它。jquery/javascript:正則表達式來代替html標籤的實例

這是我怎麼一直在做我的正則表達式:

var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; //Test against valid email 
console.log('regex: ' + emailReg.test(testString)); 

,所以我想通了字體正則表達式將是這樣的:

var fontReg = /'<'+font+'[^><]*>|<.'+font+'[^><]*>','g'/; 
console.log('regex: ' + fontReg.test(testString)); 

,但不工作。任何人都知道如何做到這一點?或者我在上面的代碼中可能做錯了什麼?

+0

我注意到你用'jquery'標記你的問題。這個XML在DOM中嗎? – namuol

回答

4

我認爲namuol'sanswer將更好地爲您服務,然後任何基於RegExp的解決方案,但我也認爲RegExp值得一些解釋。


的JavaScript不允許在正則表達式文字變量值的插值。

引號變成文字字符匹配,並且加法運算符變爲1或更多量詞。所以,當前的正則表達式成爲能夠符合這些的:

# left of the pipe `|` 
'<'font'> 
'<''''fontttt'> 

# right of the pipe `|` 
<@'font'>','g' 
<@''''fontttttt'>','g' 

但是,它不會匹配這些:

<font> 
</font> 

要注入的變量值轉換成正則表達式,你需要使用構造和字符串連接:

var fontReg = new RegExp('<' + font + '[^><]*>|<.' + font + '[^><]*>', 'g'); 

在另一方面,如果你的意思是字面font,那麼你只需要:

var fontReg = /<font[^><]*>|<.font[^><]*>/g; 

而且,每一類又可以通過使用.?,允許結合的半縮短:

var fontReg = new RegExp('<.?' + font + '[^><]*>', 'g'); 
var fontReg = /<.?font[^><]*>/g; 
+2

+1不錯的答案。所以用span替換字體應該是這樣的:''html = html.replace(/ <(.?)font[^><]*>/g,'<$span>');'' – David

+0

謝謝 - 非常全面 – mheavers

+1

@大衛差不多。只是在替換中缺少'1':''<$1span>''。但是,它應該有效。 –

4

如果我正確理解你的問題,這使用jQuery應全部更換font標籤簡單span標籤:

$('font').replaceWith(function() { 
    return $('<span>').append($(this).contents()); 
}); 

這裏的工作小提琴:http://jsfiddle.net/RhLmk/2/

+1

+1方式比嘗試使用原油正則表達式在HTML源代碼上更好 – bobince