0
私は3つのリンクを含む次のHTML文字列を持っている:javascriptを使って私のドメインに関連していないすべての外部リンクにrel = "nofollow"を追加するには?
var html = '
<a href="http://www.example.com/help">Go to help page</a>
<a href="http://blog.example.com">Go to blog page</a>
<a href="https://google.com">Go google</a>
';
私のドメイン名がexample.com
です。上のコードから分かるように、2つの内部リンクと1つの外部リンクがあります。
私はすべての外部リンク(ない内部のもの)にrel="nofollow"
属性を追加し、「魔法」の機能を記述する必要があります。私はその関数を記述しようとしていると、これは私が一度に持っている
var html = '
<a href="http://www.example.com/help">Go to help page</a>
<a href="http://blog.example.com">Go to blog page</a>
<a href="https://google.com" rel="nofollow">Go google</a>
';
:
function addNoFollowsToExternal(html) {
// List of allowed domains
var whiteList = ['example.com', 'blog.example.com'];
// Regular expression
var str = '(<a\s*(?!.*\brel=)[^>]*)(href="/https?://)((?!(?:(?:www\.)?' + whiteList.join(',') + '))[^"]+)"((?!.*\brel=)[^>]*)(?:[^>]*)>',
// execute regexp and return result
return html.replace(new RegExp(str, 'igm'), '$1$2$3"$4 rel="nofollow">');
}
残念ながら私の正規表現はdoes't作業思わだから私は、次のような結果を取得する必要があります。 addNoFollowsToExternal(html)
rel="nofollow"
外部リンクに追加されていませんhref="https://google.com"
私の仕事を解決するために私の正規表現を修正して助けてください。
ありがとうございました。 'whiteList'配列内のすべてのサブドメインをリストするのではなく、単に' * .example.com'を使用することは可能ですか? – Erik
私はあなたのニーズに上記の機能を修正しました。あなたのホワイトリストにいくつかの微調整を加えて、 – Anubis
ありがとう。この強力なソリューションですか?何とかそれをハックすることは可能ですか?私はそれを生産することを祈っています – Erik