0

テキスト文字列内のhttpに一致し、テキストから有効なURLを作成する既存の置換があります。

実例:

var Text = "Visit Gmail at http://gmail.com"
var linkText = Text.replace(/http:\/\/\S+/gi, '<a href="$&">$&</a>');
document.write(linkText);

出力:

http://gmail.comでGmailにアクセスします

問題:

この問題は、リンクが文の最後に表示され、句読点がURLの最後に誤って追加された場合に発生します。

これを克服するために、誰かが私の正規表現を拡張する方法(またはこれが変換された後に2番目の置換を追加する方法)についてアドバイスできますか?

正しい答えには/\W$/g、元の正規表現に沿って何かを追加することが含まれると思いますが、これを文字列全体の1つの単語に適用する方法がわかりません。

いつものように、どんな助けにもとても感謝しています。

ありがとう、ピート

問題のあるリンクの例

これらはすべて、 http: //gmail.comへのリンクを解決する必要があります

ドメイン名の直後にスラッシュと句読点で終わるものと句読点で終わるものがあることに注意してください。

4

3 に答える 3

1

試す

/http:\/\/(.(?![.?] |$))*/

私の論理では、最後の文字がドット、または疑問符の後にスペースまたは文字列の終わりが続く場合、それは必要ありません。

var Text = "Visit Gmail at http://gmail.com"
var linkText = Text.replace(/http:\/\/(.(?![.?](?:\s|$)))*./gi, '<a href="$&">$&</a>');
document.write(linkText);

与える

"Visit Gmail at <a href=\"http://gmail.com\">http://gmail.com</a>"

編集:

これは良いかもしれません(現在空白と一致していません)

http:\/\/(.(?!(?:[.?](?: |$))))*.
于 2012-05-14T15:23:18.780 に答える
0

ネガティブな文字クラスを使用しないのはなぜですか?

/ http:// \ S + [^。、?!] / gi

于 2012-05-14T15:06:32.343 に答える
0

不要な文字を削除するかどうかに関係なく、末尾の不要な文字を 考慮することができます。

両方の代わりに、キャプチャバッファ1があります。<a href="$1">$1<\/a>

これはまた、あなたが後ろを振り返ることができることを前提としています。クライアント側のJSがルックビハインドアサーションを実行できるかどうかはわかりませんが。

不要な文字を取り除く

/(http:\/\/\S+)(?<![\/.,?!])[\/.,?!]*/

または、不要な文字を残します

/(http:\/\/\S+)(?<![\/.,?!])/

代わりに、先読みを使用

ストリップ

/(http:\/\/\S+?(?=[\/.,?!]+(?:\s|$)|\s|$))[\/.,?!]*/  

離れる

/(http:\/\/\S+?(?=[\/.,?!]+(?:\s|$)|\s|$))/
于 2012-05-14T15:39:27.433 に答える