2

JQueryを使用して、データベースの結果のリスト内にある静的な電子メールアドレスにmailtoリンクを追加しようとしています。最初の結果で機能する次の抜粋をオンラインで見つけることができましたが、最初の結果以降の電子メールアドレスでは機能しません。

これがなぜであるのか、そして結果に含まれるすべての電子メールアドレスにmailto:属性を適用するためにどのように取得できるのか興味があります。:-)

現在のコード:

<script type="text/javascript">
$(document).ready(function(){
    var regEx = /(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)/;
    $("table td").filter(function() {
        return $(this).html().match(regEx);
    }).each(function() {
        $(this).html($(this).html().replace(regEx, "<a href=\"mailto:$1\">$1</a>"));
    });
});

ありがとう!

4

2 に答える 2

4

おそらくあなたにとってはもう役に立ちませんが、誰かにとっては役立つかもしれません: 正規表現の最後に 'g' を追加する必要があります:

$(document).ready(function() {
var regEx = /(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)/g;
$("table td").filter(function() {
    return this.innerHTML.match(regEx);
}).html(function(index, old) {
    return old.replace(regEx, "<a href=\"mailto:$1\">$1</a>");
});

}); </p>

W3C School サイトから:

注: 正規表現に (グローバル検索を実行するための) g 修飾子が含まれていない場合、match() メソッドは文字列内の最初の一致のみを返します。

于 2013-12-24T09:10:00.410 に答える
3

なぜ最初の一致でのみ機能するのかわかりませんが、コードを次のように改善できます。

$(document).ready(function() {
    var regEx = /(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)/;
    $("table td").filter(function() {
        return this.innerHTML.match(regEx);
    }).html(function(index, old) {
        return old.replace(regEx, "<a href=\"mailto:$1\">$1</a>");
    });
});​
于 2012-05-21T02:03:02.410 に答える