1

正規表現を使用して文字列内の URL を検索し、それらを (JavaScript で) 実際の HTML リンクに変換しています。私の正規表現の問題は、http の前に前の文字が含まれていることです。(最初の配列の 2 番目の正規表現について話しています。)

str = "testhttp://example.com";

search = new Array(
    /\[url\](.*?)\[\/url\]/ig,
    /(?:[^\]\/">]|^)((https?):\/\/[-A-ZÅÄÖ0-9+&@#\/%?=~_|!:,.;]*[-A-ZÅÄÖ0-9+&@#\/%=~_|])/ig
);

replace = new Array(
    '<a href="//$1">$1</a>',
    '<a href="$1">$1</a>'
);

for (i = 0; i < search.length; i++) {
    str = str.replace(search[i], replace[i]);
}

出力は次のようになります。

tes<a href="http://example.com">http://example.com</a>

しかし、私はそれが欲しい:

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

重要なのは、URL が文字列の先頭にある場合でも、正規表現が URL を検出する必要があることですが、前の文字が次の 3 つの文字のいずれかである場合は検出されません: "/>

私は正規表現にかなり慣れていません。ご理解いただければ幸いです。

ありがとう!

4

2 に答える 2

1

問題は、JavaScript が内部のキャプチャ グループではなく、常に完全な一致を置き換えることです。

したがって、これを軽減するためのきちんとした (そしてテスト済みの) トリックを次に示します。最初のサブパターン キャプチャを作成します。

/([^\]\/">]|^)((https?):\/\/[-A-ZÅÄÖ0-9+&@#\/%?=~_|!:,.;]*[-A-ZÅÄÖ0-9+&@#\/%=~_|])/ig

そして、それを明示的に含めます:

'$1<a href="$2">$2</a>'
于 2012-09-25T17:28:11.743 に答える
0

後ろを振り返る:

 /(?<[^\]\/">]|^)((https?):\/\/[-A-ZÅÄÖ0-9+&@#\/%?=~_|!:,.;]*[-A-ZÅÄÖ0-9+&@#\/%=~_|])/ig 
于 2012-09-25T17:31:41.197 に答える