2011-09-28 56 views
1

我想要采取一些解析XML数据,搜索标签的实例并替换该标签(以及任何可能在字体标签内),以及用一个简单的标签替换它。jquery/javascript:正则表达式来代替html标签的实例

这是我怎么一直在做我的正则表达式:

var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; //Test against valid email 
console.log('regex: ' + emailReg.test(testString)); 

,所以我想通了字体正则表达式将是这样的:

var fontReg = /'<'+font+'[^><]*>|<.'+font+'[^><]*>','g'/; 
console.log('regex: ' + fontReg.test(testString)); 

,但不工作。任何人都知道如何做到这一点?或者我在上面的代码中可能做错了什么?

+0

我注意到你用'jquery'标记你的问题。这个XML在DOM中吗? – namuol

回答

4

我认为namuol'sanswer将更好地为您服务,然后任何基于RegExp的解决方案,但我也认为RegExp值得一些解释。


的JavaScript不允许在正则表达式文字变量值的插值。

引号变成文字字符匹配,并且加法运算符变为1或更多量词。所以,当前的正则表达式成为能够符合这些的:

# left of the pipe `|` 
'<'font'> 
'<''''fontttt'> 

# right of the pipe `|` 
<@'font'>','g' 
<@''''fontttttt'>','g' 

但是,它不会匹配这些:

<font> 
</font> 

要注入的变量值转换成正则表达式,你需要使用构造和字符串连接:

var fontReg = new RegExp('<' + font + '[^><]*>|<.' + font + '[^><]*>', 'g'); 

在另一方面,如果你的意思是字面font,那么你只需要:

var fontReg = /<font[^><]*>|<.font[^><]*>/g; 

而且,每一类又可以通过使用.?,允许结合的半缩短:

var fontReg = new RegExp('<.?' + font + '[^><]*>', 'g'); 
var fontReg = /<.?font[^><]*>/g; 
+2

+1不错的答案。所以用span替换字体应该是这样的:''html = html.replace(/ <(.?)font[^><]*>/g,'<$span>');'' – David

+0

谢谢 - 非常全面 – mheavers

+1

@大卫差不多。只是在替换中缺少'1':''<$1span>''。但是,它应该有效。 –

4

如果我正确理解你的问题,这使用jQuery应全部更换font标签简单span标签:

$('font').replaceWith(function() { 
    return $('<span>').append($(this).contents()); 
}); 

这里的工作小提琴:http://jsfiddle.net/RhLmk/2/

+1

+1方式比尝试使用原油正则表达式在HTML源代码上更好 – bobince