4

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

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

但我不知道如何做到不以 http:// 开头

4

4 回答 4

5

使用负前瞻:

content.replace(/(<img *src=")(?!http:\/\/)(.*?)"/, '$1' + this.websiteUrl + '$2"');
于 2012-11-26T09:56:10.793 回答
3

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

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

如果您打算将这个正则表达式用于整个 DOM(片段),请考虑使用解析器而不是正则表达式。这是一个 X 浏览器示例

于 2012-11-26T10:00:11.020 回答
0

如果你只是在前面加上一些文本,你真的不需要正则表达式。怎么样:

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

img您要更改 src 属性的元素在哪里。

如果您没有 img 标签或其父标签之一作为对象,但您的 HTML 格式正确,则可以使用 aDOMParser来获取它们:

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;
}
于 2012-11-26T09:56:57.090 回答
0

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

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

即使 img 标签分布在 2 行甚至有多个 img 标签,这个也能工作

于 2020-02-07T12:12:33.493 回答