正则表达式不适用于html字符串,标记之间没有空格

时间:2014-01-24 09:15:52

标签: javascript regex

假设我要从此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个元标记。如何修改此常规表达式以达到预期效果?

4 个答案:

答案 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;

DEMO

答案 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

说明:

enter image description here

代码:

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,"")

FIDDLE DEMO