2011-08-17 37 views
2

文本使用Javascript - 正則表達式規則,找XX但不是在span標籤

message = 'Hello, my name ist Peter!'; 

我的標籤

tags = {}; 
tags.tagsOne = {}; 
tags.tagsOne['t1'] = 'hello|is|there|g'; 
tags.tagsOne['t2'] = 'bub'; 
tags.tagsOne['t3'] = 'dog|house'; 
tags.tagsTwo = {}; 
tags.tagsTwo['t1'] = 'blub|man'; 
tags.tagsTwo['t2'] = 'word'; 
tags.tagsTwo['t3'] = 'sorry|high'; 

正則表達式

regexT1 = new RegExp('('+tags.tagsOne['t1']+'|'tags.tagsTwo['t1']+')','gi'); 
regexT2 = new RegExp('('+tags.tagsOne['t2']+'|'tags.tagsTwo['t2']+')','gi'); 
regexT3 = new RegExp('('+tags.tagsOne['t3']+'|'tags.tagsTwo['t3']+')','gi'); 

更換

message = message.replace(regexT1,'<span class="highlightT1">$1</span>'); 
message = message.replace(regexT2,'<span class="highlightT2">$1</span>'); 
message = message.replace(regexT3,'<span class="highlightT3">$1</span>'); 

他查找和替換的<span class="highlightT1">$1</span>了。
是否有可能在正則表達式來表示,但不是這個 - ><span class="highlightT1">$1</span>


- >http://jsfiddle.net/tVmTe/3/

UPDATE:
工作實例 - >http://jsfiddle.net/tVmTe/9/

+1

這是可能的,但它會過分複雜的正則表達式。實現相同的結果而不是修改它們會更簡單和可維護。例如,在向這些正則表達式提取字符串之前檢查特定條件。 – J0HN 2011-08-17 12:37:44

+0

通常你不應該用正則表達式來解析html。 – 2011-08-17 14:40:13

回答

1

在空間上拆分消息並分別考慮每個單詞。

var words = message.split(' '), 
    var i = 0; 
for(i; i < words.length; ++i){ 
    if(regexT1.test(words[i])){ 
     words[i] = words[i].replace(regexT1,'<span class="highlightT1">$1</span>'); 
     continue; 
    } 
    //... 
} 
message = words.join(' '); 
相關問題