我有一个带有src的图像标记,我想在src上添加一个网站URL,但前提是它不以http://开头。到目前为止我有
content.replace(/(<img *src=")(.*?)"/, '$1' + this.websiteUrl + '$2"');
但我不知道怎么做不以http:// bit
开头答案 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标签,该标签也可以工作