4

src を含むイメージ タグがあり、Web サイトの URL を src の先頭に追加したいのですが、それが 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;

imgsrc属性を変更する要素はどこにありますか。

imgタグまたはその親の1つをオブジェクトとして持っていないが、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;
}
于 2012-11-26T09:56:57.090 に答える