javascript - jQuery/JavaScript : regex to replace instances of an html tag

标签 javascript jquery regex

我正在尝试获取一些已解析的 XML 数据,在其中搜索标签的实例并替换该标签(以及字体标签内可能包含的任何内容),然后将其替换为一个简单的标签。

这就是我做正则表达式的方式:

var emailReg = /^([\w-\.]+@([\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));

但这行不通。有人知道这样做的方法吗?或者我在上面的代码中可能做错了什么?

最佳答案

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


JavaScript 不允许在 RegExp 文字中插入变量值。

引号变为字面字符匹配,加法运算符变为1-or-more 量词。因此,您当前的正则表达式能够匹配这些:

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

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

但是,它不会匹配这些:

<font>
</font>

要将变量值注入(inject)正则表达式,您需要使用构造函数和字符串连接:

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

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

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

此外,可以使用 .? 缩短其中的每一个,从而允许合并两半:

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

关于javascript - jQuery/JavaScript : regex to replace instances of an html tag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588749/

相关文章:

javascript - 如何在 while 循环中制作动画

jquery css(空白)IE7/8 错误?

javascript正则表达式忽略文本之间的条件

Java匹配正则表达式,然后使用第二个正则表达式格式化字符串

javascript - 从 scala.js 调用 jquery .each 方法

javascript - json_decode $_POST 没有收到 Javascript JSON

javascript - 使用 JQuery/Javascript 将值放置到隐藏字段

javascript - 在 Flash 网站上考虑 SEO

javascript - 使用此变量获取空白值

objective-c - 动态生成枚举参数?