0

すべてのメールアドレスを読み取ってリンクさせるJavaScript関数を作成したいと思います。たとえば、見つかった場合は、にtest@example.com置き換え<a href="mailto:test@example.com">test@example.com</a>ます。

私はこれを使用しています:

document.body.innerHTML = document.body.innerHTML.replace(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi, <a href="mailto:$1">$1</a>'));

単純な電子メールアドレスには問題なく機能します。

ただし、問題は、電子メールアドレスがすでにこの形式になっている場合です。

"<a href="mailto:test@example.com">test@example.com</a>"

その後、それは動作しません。出力は次のように間違っています:

test@example.com">test@example.com

解決策を教えてください。したがって、関数は正常に機能します。

または、単純な電子メールをリンクにするその他の関数で、電子メールがすでにmailto:linkフォームにある場合は、何もしません。

4

1 に答える 1

2

>これは、電子メールの前の文字が、、、または:ではない場合にのみ置換を行う1つの方法です。これは基本的に、ネガティブな後読みをエミュレートする方法です。"'

var str = ' test@example.com <a href="mailto:test@example.com">test@example.com</a> ',
    rex = /(["'>:]?)([\w.-]+@[\w.-]+\.[\w.-]+)/gi;

str = str.replace( rex, function ( $0, $1 ) {
    return $1 ? $0 : '<a href="mailto:' + $0 + '">' + $0 + '</a>';
});

// " <a href="mailto:test@example.com">test@example.com</a> <a href="mailto:test@example.com">test@example.com</a> "

\wと同等[a-zA-Z0-9_]です。

交換がいつ防止されるかについてより具体的にするには、rex上記を次のようなものに変更できます。

rex = /(<a href(?:(?!<\/a\s*>).)*)?([\w.-]+@[\w.-]+\.[\w.-]+)/gi;

<a hrefこれは、メールがとの間に表示された場合にのみ、置き換えを防ぎます</a>

これらの種類の正規表現ソリューションはいずれも防水ではありませんが、状況によっては十分な場合があります。

于 2013-02-23T11:59:27.610 に答える