2013-02-07 185 views
0
var tags=["div","span","body"]; 
for (i=0; i<=tags.length; i++){ 
    source = source.replace(/\&lt\;<tags[i]/i, '<span class="tags[i]">&lt;tags[i]</span>'); 
} 

基本上,我試圖把所有打開的div,span和body標籤放在一個span上,並設置相應的類。但是,我有問題獲取裏面的變量。從javascript中的字符串變量創建正則表達式

我可以爲每個不同的標籤放置線條和線條,但考慮到每個按鍵都會調用此功能,我希望儘可能保持代碼的小巧和高效。

還有其他的選擇嗎?我的意思是,如果沿着這些路線可能會更好:

source = source.replace(/\&lt\;<div|<span/i, '<span class="div|span">&lt;div|span</span>'); 

但是,它顯然沒有讓我到任何地方。

+0

[正則表達式模式與變量]的可能重複(http://stackoverflow.com/questions/9513431/regular-expression-pattern-with--變量) –

回答

2

您可以用RegExp對象從字符串中創建您的正則表達式:

source = source.replace(new RegExp("\\&lt\\;<" + tags[i], "i"), '<span class="' + tags[i] + '">&lt;' + tags[i] + '</span>'); 

但是你的另外一個設想,也可以通過捕獲標籤,並在更換引用它:

source = source.replace(/\&lt\;<(div|span|body)/i, '<span class="$1">&lt;$1</span>'); 
+0

啊,像一個魅力的作品,我肯定更喜歡替代方案。謝謝。 – iyop45

1

您可以使用| (equivalent of OR)的正則表達式:()用於獲取匹配元素(div,span或body),並且您可以使用$1

source.replace(/<(div|span|body)/i,'<span class="$1">&lt;$1&gt;</span>') 
相關問題