我正在尝试获取一些已解析的 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/