0

テキストからURLを取得し、関数によって置換文字列内のすべての一致を再度変更する正規表現に問題があります。以下のコードは、私がやりたいことのダミーの例です。このようなことは可能ですか?

var exp = /\b((http:\/\/|https:\/\/)[\S]*)/g;
text = text.replace(exp, "<a href=\"$1\" title=\""+parseUri("$1").host+"\"></a>");
4

1 に答える 1

1

次の2番目の引数として関数を指定し.replaceます。

var exp = /\bhttps?:\/\/[\S]*/g;
text = text.replace(exp, function ($0) {
    return '<a href="' + $0 + '" title="' + parseUri($0).host + '"></a>'
});

(これ$0は単なる変数名であることに注意してください。別の名前を付けることができます)。

置換関数の引数の意味については、String.replaceMDNに関するのドキュメントを確認してください。最初の引数は、正規表現全体によるテキストキャプチャです。次に、次のN個の引数は、正規表現内のN個のキャプチャグループによってキャプチャされたテキストです。

また、自由に正規表現を書き直します。\bはアサーションであるため、テキストは消費されません。

于 2013-03-24T14:01:17.800 に答える