JavaScript字符串替换为棘手的正则表达式

时间:2010-03-22 17:23:59

标签: javascript regex string

我正在尝试找出我需要更改此字符串的正则表达式

html = '<img style="width: 311px; height: 376px;" alt="test" src="/img/1268749322.jpg" />';

到这个

html = '<img width="311" height="376" alt="test" src="/img/1268749322.jpg" />';

在Javascript.replace的帮助下。

这是我的开始:

html = html.replace(/ style="width:\?([0-9])px*"/g, "width=\"$1\"");

任何人都可以帮助我吗?

感谢

5 个答案:

答案 0 :(得分:2)

  1. 这是generally considered a Bad Thing to do HTML parsing with RegExs

    为什么不从JavaScript编辑DOM?

  2. 我不是CSS专家,但是使用样式比宽度/高度属性更好吗?

  3. 您在:\s*)之后忘记了空格。你不想要?因为它将错过&gt; 1个空格或标签

答案 1 :(得分:1)

html = '<img style="width: 311px; height: 376px;" alt="test" src="/img/1268749322.jpg" />';
var d = document.createElement("div");
d.innerHTML = html;
var img = d.firstChild;
var width = parseInt(img.style.width, 10);
var height = parseInt(img.style.height, 10);
img.setAttribute("width", width);
img.setAttribute("height", height);
img.removeAttribute("style");

alert(d.innerHTML);

当然,如果你不以字符串开头,事情就会变得容易一些; - )

答案 2 :(得分:0)

Gumbo是对的,你应该使用DOM。

但是你的正则表达式:\?(问号)应该是什么意思?我会在那个位置插入\s*(任意数量的空格)。

答案 3 :(得分:0)

如果你愿意,我可以更详细说明,让我知道这是如何工作的:

html = html.replace(/style=".*?width:\s?(\d+).*?height:\s?(\d+).*?"/g, "width=\"$1\" height=\"$2\"");

编辑:转发qq

答案 4 :(得分:0)

是的,通常我会用DOM来做,但在这种特殊情况下,我需要解析从WYSIWYG-Editor威尔过滤器样式属性给出的HTML代码。一般来说这很好,但对于图片我想用这个html.replace-Hack保持设置的大小。

这就是答案:

html = html.replace(/ style=".*?width:\s?(\d+).*?height:\s?(\d+).*?"/g, " width=\"$1\" height=\"$2\"");

感谢您的帮助: - )