2012-05-31 37 views
0

我試圖將XML標記轉換爲大寫,同時保留屬性和文本的大小寫。因此,例如使用JavaScript正則表達式將XML標記轉換爲大寫

<Mytag Category="Parent">Value1</Mytag> 

變爲

<MYTAG Category="Parent">Value1</MYTAG> 

我有一個正確匹配的XML標記一個正則表達式,但大寫功能似乎並不奏效。

myXmlElement.replace(/<(\/)*([a-zA-Z_0-9]+)([^>]*)>/g,"<$1" + "$2".toUpperCase() + "$3>") 

我使用String.prototype.toUpperCase.apply("$2"),以及傳遞函數作爲replace參數

myXmlElement.replace(/<[\/]*([a-zA-Z_0-9]+)[^>]*>/g, 
        function($1,$2,$3){return <$1 + $2.toUpperCase() + $3>}) 

但是,這並不工作,因爲$ 1,$ 2,$ 3也試圖似乎指整個匹配元素($ 1 =,$ 2 =)

我敢肯定在這裏我忽略了一些小事,任何人都可以幫忙嗎?

+0

那是一個錯字,謝謝你的注意。然而,當我這樣做時,參數仍然沒有正確的值。 – John

+0

將我的評論更新爲完整答案,希望對您有所幫助;) – Tharabas

+0

不要使用正則表達式來解析標記,它會失敗。例如它不能區分可能包含不是標記的匹配模式的CDATA(如腳本元素內容:'if(a RobG

回答

1

如果你希望你的標籤名之前和之後的字符匹配,需要投入匹配的括號模式中:

var pattern = /<([\/]*)([a-zA-Z_0-9]+)([^>]*)>/g 
var newTag = myElement.replace(pattern, function(full, before, tag, after) { 
    return "<" before + tag.toUpperCase() + after + ">" 
}) 

替換功能將採取full匹配表達式作爲第一個參數。這就是爲什麼你可能會忽略它。 之後,模式的任何匹配大括號將作爲參數傳遞。

+0

這很好,謝謝。比賽順序作爲參數傳遞後,首先是失蹤的一塊:) – John

相關問題