0

javascriptのこの正規表現に問題があります。同じ正規表現はPHPでも機能しますが、JavaScriptでは次のエラーが発生します:「無効な正規表現:(?」の後の認識されない文字。」私の正規表現は次のとおりです。

text = text.replace(/(?<!\=\")http([A-Za-z0-9:\/\.\+\?\%\@\!\#\&_-]+)/g,
    '<a href="http$1" target="_blank" rel="nofollow">http$1</a> ');

問題は最初の部分(?< !\=\")にありますが、PHPまたはCの通常の正規表現であるため、解決方法がわかりません。

この構造の類似物はありますか?"のようなhtml要素のURL置換を防ぐために、「http」の直前の記号(二重引用符)を禁止する必要があり<img>ます。

記号<に加え!て、その後のテキストの表示でエラーが発生するため、質問を編集しています。(これもエラーを引き起こす可能性があります)。

4

2 に答える 2

3

この問題には正規表現を使用しないことをお勧めします。正規表現は XML で使用することを意図していないため、最終的には失敗します。以下を使用して、自動リンク機能 (jQuery)を実現できます。

$('#text').contents().filter(function() {
    return this.nodeType == 3;
}).each(function(i, t){
    $(t).replaceWith(t.nodeValue.replace(/(http:\/\/[\S]+)/g,
       '<a href="$1" target="_blank" rel="nofollow"><b>$1</b></a>'));
});

この正規表現はテキスト ノードで実行されるため、 のような要素が見つからないことが保証されます<img>。これがライブフィドルです

このコードは、最初のレベルの子のみを返すため、階層的に複雑な要素ではそのままでは機能しないことに注意してください。適切であれば、より複雑なソリューション.contents()を使用することもできます。

ただし、XML の概念 (ノード、要素、テキスト ノード)を使用することが問題を解決する方法であるため、高速で機能する堅牢なコードが得られます。

于 2012-09-29T21:54:43.943 に答える
1

上記の例(の追加を含む):

var text = 'something bla bla bla like this domain.com/blabla/bla.php or more. <img src="img.com" />'

これはあなたのために働くでしょう:

var newText = text.replace(/([^ ]*\.com\/[^ ]*)/g,'<a href="http://$1"; target="_blank" rel="nofollow">$1</a>');

そして出力:

something bla bla bla like this <a href="http://domain.com/blabla/bla.php"; target="_blank" rel="nofollow">domain.com/blabla/bla.php</a> or more. <a img src="img.com" />

基本的に、スペースではなく、.com/プラスの前のスペース以外のものでURLを認識します。<img src="img.com" />それは であるため、を取得しません.com"

.com ドメインしかない場合はこれで問題ありません。.net、.org などがある場合は、それらをチェック対象として追加する必要があります。

于 2012-09-29T20:46:47.787 に答える