2011-08-17 39 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(' '); 
相关问题