假设我要从此HTML字符串中删除第二个 <meta>
标记:
<meta http-equiv="set-cookie" content="aaaa"><meta http-equiv="set-cookie" content="bbbb"><meta http-equiv="set-cookie" content="cccc">
使用此正则表达式
/<meta http-equiv=[\"']?set-cookie[\"']? content=[\"']bbbb[\"'].*>/ig
不仅会删除第2个元标记,还会删除第3个元标记。如何修改此常规表达式以达到预期效果?
答案 0 :(得分:0)
*
贪婪,并且会尽可能地消耗你的字符串
将你的正则表达式改为
/<meta http-equiv=[\"']?set-cookie[\"']? content=[\"']bbbb[\"'].*?>/ig
注意最后的.*?
部分。 *
量词之后的问号会使你的正则表达式不正确,所以它会消耗字符串,直到检索到第一个尖括号。
答案 1 :(得分:0)
为什么不使用DOM操作?使用正则表达式超过非常简单的 HTML should be avoided。
var head = document.createElement('head');
head.innerHTML = htmlString;
var meta = head.getElementsByTagName('meta')[1];
meta.parentNode.removeChild(meta);
htmlStr = head.innerHTML;
答案 2 :(得分:0)
我不认为普通正则表达式是可能的。这是我的看法:
var str = '<meta http-equiv="set-cookie" content="aaaa"><meta http-equiv="set-cookie" content="bbbb"><meta http-equiv="set-cookie" content="cccc">';
var r = /^<[^>]+>(<[^>]+>)/;
str.replace(r.exec(str)[1], ''); // <meta http-equiv="set-cookie" content="aaaa"><meta http-equiv="set-cookie" content="cccc">
答案 3 :(得分:0)
只需使用:
/<meta[^>]*content="bbbb">/
<强> DEMO 强>
说明:
代码:
var s='<meta http-equiv="set-cookie" content="bbbb"><meta http-equiv="set-cookie" content="cccc"><meta http-equiv="set-cookie" content="aaaa">';
var regex=/<meta[^>]*content="bbbb">/g;
var result=s.replace(regex,"")