2011-06-06 81 views
2

我有類似如下; -匹配文本

<--customMarker>Test1<--/customMarker> 
<--customMarker key='myKEY'>Test2<--/customMarker> 
<--customMarker>Test3 <--customInnerMarker>Test4<--/customInnerMarker> <--/customMarker> 

我需要能夠在customMarker標籤之間的替換文本,我嘗試以下; -

str.replace(/<--customMarker>(.*?)<--\/customMarker>/g, 'item Replaced') 

哪些工作正常。我想也忽略自定義內部標籤,不匹配或替換文本。

另外我需要一個單獨的表達式來從Text2標籤中提取屬性key ='myKEY'的值。

非常感謝

編輯 其實我想找到註釋標記,但註釋標籤不正確顯示之間的事情,所以我不得不刪除「!」。有一個獨特的情況,需要評論標籤...如果有人知道足夠的正則表達式來幫助,這將是非常棒的。謝謝你。

+3

待辦事項你有這樣做嗎?看起來很複雜。 – Kevin 2011-06-06 11:44:42

+0

oops ...!沒有意識到已經添加了評論。我已經調整了一下這個問題,我只需要忽略內部標籤,並且需要一個表達式來從標籤 – ClaraU 2011-06-06 12:35:45

+0

Buddy中提取屬性鍵,當您添加自定義標籤時,它將被稱爲xml。不是嗎? – 2011-06-06 12:36:54

回答

2

最後,我不喜歡的東西下面(櫃面任何人都需要這種享受!但是要注意:閉口不談鎮是使用正則表達式HTML標記是不理想的,所以做自己的研究和讓你的心對我來說,它必須做這樣一來,大多BCOS我想,也BCOS它簡化了在這種情況下)工作; -

var retVal = str.replace(/<--customMarker>(.*?)<--\/customMarker>/g, function(token, match){ 
    //question 1: I would like to also ignore custom inner tags and not match or replace them with text. 
    //answer: 
    var replacePattern = /<--customInnerMarker*?(.*?)<--\/customInnerMarker-->/g; 
    //remove inner tags from match 
    match = $.trim(match.replace(replacePattern, '')); 
    //replace and return what is left with a required value 
    return token.replace(match, objParams[match]); 

    //question 2: Also I need a separate expression to extract the value of the attribute key='myKEY' from the tag with Text2. 
    //answer 
    var attrPattern = /\w+\s*=\s*".*?"/g; 
    attrMatches = token.match(attrPattern);//returns a list of attributes as name/value pairs in an array  

})

0

你不能用<customMarker>代替嗎?然後,您可以使用getElementsByTagName('customMarker')並從中獲取內部文本和子元素。

0

正則表達式僅僅匹配一個項目。一旦你說過匹配,這取決於你如何處理它。這是大多數人使用正則表達式的問題的一部分,他們嘗試並結合三個不同的步驟。正則表達式匹配只是第一步。

對於單個正則表達式,您所要求的內容將無法實現。如果你想使用正則表達式,你將需要一個迷你狀態機。也就是說,圍繞匹配的邏輯包裝器,以便它在每個邏輯部分中移動。

我會建議你在標準api中尋找一個預編譯引擎來解析html,而不是滾動你自己的。如果您確實需要這樣做,請閱讀flex manual以瞭解正則表達式的工作原理以及您使用它們構建的狀態機。最好的例子是匹配多行c註釋的部分。