Javascript正则表达式替换src内容

时间:2012-11-26 09:53:20

标签: javascript regex

我有一个带有src的图像标记,我想在src上添加一个网站URL,但前提是它不以http://开头。到目前为止我有

content.replace(/(<img *src=")(.*?)"/, '$1' + this.websiteUrl + '$2"');

但我不知道怎么做不以http:// bit

开头

4 个答案:

答案 0 :(得分:5)

使用否定前瞻:

content.replace(/(<img *src=")(?!http:\/\/)(.*?)"/, '$1' + this.websiteUrl + '$2"');

答案 1 :(得分:2)

@ Guffa的模式就是答案。只是几个附注:假设标记看起来像这个<img alt="foo" src="foo/bar.png" />,你的模式将不起作用,试试这个:

content.replace(/(<img.+src=")(?!http:\/\/)(.*?)"/,'$1' + this.websiteUrl + '$2"');

如果您要将此正则表达式用于整个DOM(片段),请考虑使用解析器而不是正则表达式。 Here's a X-browser示例

答案 2 :(得分:0)

如果您只是在添加一些文字,那么您真的不需要正则表达式。怎么样:

if /^http:\/\//.test(img.src)
    img.src = this.websiteUrl + img.src;

img是要更改src属性的元素。

如果您没有将img标记或其中一个父母作为对象,但您的HTML格式正确,则可以使用DOMParser来获取它们:

var parser = new DOMParser();
var doc = parser.parseFromString(html, "text/XML");
var collection = doc.getElementsByTagName("img");
for (var i = 0; i < collection.length, i++){
    if /^http:\/\//.test(collection[i].src)
        collection[i].src = this.websiteUrl + collection[i].src;
}

答案 3 :(得分:0)

就我而言,Elias Van Ootegem提供的解决方案不起作用。 我正在使用:

content.replace(/(<img[^]+?src=")(?!http:\/\/)(.*?)"/gi,'$1' + this.websiteUrl + '$2"');

即使img标签分布在两行上,甚至具有多个img标签,该标签也可以工作