我有一个带有 src 的图像标签,我想在 src 上添加一个网站 url,但前提是它不以 http:// 开头。到目前为止我有
content.replace(/(<img *src=")(.*?)"/, '$1' + this.websiteUrl + '$2"');
但我不知道如何做到不以 http:// 开头
我有一个带有 src 的图像标签,我想在 src 上添加一个网站 url,但前提是它不以 http:// 开头。到目前为止我有
content.replace(/(<img *src=")(.*?)"/, '$1' + this.websiteUrl + '$2"');
但我不知道如何做到不以 http:// 开头
使用负前瞻:
content.replace(/(<img *src=")(?!http:\/\/)(.*?)"/, '$1' + this.websiteUrl + '$2"');
@Guffa 的模式就是答案。只是一些旁注:假设标记看起来像这样<img alt="foo" src="foo/bar.png" />
,你的模式将不起作用,试试这个:
content.replace(/(<img.+src=")(?!http:\/\/)(.*?)"/,'$1' + this.websiteUrl + '$2"');
如果您打算将这个正则表达式用于整个 DOM(片段),请考虑使用解析器而不是正则表达式。这是一个 X 浏览器示例
如果你只是在前面加上一些文本,你真的不需要正则表达式。怎么样:
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;
}
就我而言,Elias Van Ootegem 提供的解决方案不起作用。我正在使用:
content.replace(/(<img[^]+?src=")(?!http:\/\/)(.*?)"/gi,'$1' + this.websiteUrl + '$2"');
即使 img 标签分布在 2 行甚至有多个 img 标签,这个也能工作