Ich habe den folgenden HTML-String mit drei Links:Wie füge ich rel = "nofollow" zu allen externen Links hinzu, die nicht zu meiner Domain mit Javascript gehören?
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>
';
Mein Domain-Name ist example.com
. Wie Sie aus dem obigen Code sehen können, gibt es zwei interne Links und einen externen.
Ich muss "magische" Funktion schreiben, die rel="nofollow"
Attribut zu allen externen Links (nicht interne) hinzufügt. Also muss ich das folgende Ergebnis erhalten:
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>
';
ich diese Funktion zu schreiben, ich versucht, und das ist mir damals haben:
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">');
}
Leider ist mein regexp does't Arbeit scheint. Nach der Ausführung addNoFollowsToExternal(html)
rel="nofollow"
nicht hinzugefügt, um externe Verbindung mit href="https://google.com"
Bitte helfen Sie mir bei der Festlegung meiner regulären Ausdruck, um meine Aufgabe zu lösen.
Danke für die Hilfe. Ist es möglich, nicht alle Subdomains im Array 'whiteList' aufzulisten, sondern zum Beispiel' * .example.com' zu verwenden? – Erik
Ich habe die obige Funktion an Ihre Bedürfnisse angepasst, indem ich das www entfernt habe. Teil von der Regex und fügen Sie einige Optimierungen zu Ihrer Whitelist – Anubis
Danke. Ist diese robuste Lösung? Ist es möglich, es irgendwie zu hacken? Ich frage, weil Planung, es n Produktion zu verwenden – Erik