1

これに関するいくつかの投稿を見ましたが、それらはPHP用でした(JavaScriptが必要です(実際にはActionScript(ActionScriptはJavaScriptを拡張するため)))ので、私の質問は、コンマ、ピリオド、疑問符、または感嘆符までしかキャプチャしない方法です。

これは私がこれまでに持っているものです、

instructionText.replace(/(https?:\/\/\w.*[\w])/gi, "<a href='$1' target='_blank'>$1</a>");

しかし、「Visithttp://www.google.com。Helloworld」というテキストを使用すると HelloWorldの部分がキャプチャされます。

上記のキャプチャグループの結果は「http://google.com.Helloworld」です。明らかに、URLの後には何も必要ありません。単純なURLである必要があります。

主に、これらの「。、!?」のいずれかにチェックを追加したいだけです。またはスペース文字を入力して、キャプチャグループを終了します。完璧である必要はありません。

ところで、最初にRegExをテストするものがあるかどうかはわかりませんが、そうでない場合はRegExrを使用できます。

4

5 に答える 5

2

URLにスペースがなく、その後にスペースまたは文字列の終わりがあると仮定します。

instructionText.replace( /(https?:\/\/\S+?)(?=[.,!?]?(\s|$))/g, "<a href='$1' target='_blank'>$1</a>" );

'http [s]://'とスペース以外の文字をできるだけ少なくキャプチャし、オプションでの1つがあり.,!?、次にスペースまたは文字列の終わりがあることを確認します。

于 2013-01-15T19:31:14.093 に答える
0

問題は、キャプチャし.*た後にaが続くことです。\wこれは、任意の量の後に単語が続くことを意味します...

/(https?:\/\/\w.*[\w])/

ワイルドカードキャプチャを貪欲にしないようにする必要があります...

/(https?:\/\/\w.*?[\w])/

したがって、キャプチャする前にできるだけ少ない文字をキャプチャします\w


編集:詳細

さらに、正規表現は非常に単純ですが、残念ながら、有効なものと無効なものには非常に多くのバリエーションがあるため、URLのキャプチャは非常に複雑です。コンテキスト内のURLに適していると考えるものを定義する明確な線を自分で設定する必要があります。

たとえば、有効なトップレベルドメインを確保したい場合は、次のようなものを含める必要があります...

/https?:\/\/\w.*?\.(com|org|co\.uk| ... etc ... )/

これは、新しいトップレベルドメインが登録されるとすぐに廃止されます。

プロトコルから始まり、次のスペースまでを一致させたい場合は、次のようにする必要があります...

/[a-zA-Z]+:\/\/\S+/

幸運を!

于 2013-01-15T17:10:31.623 に答える
0

正規表現では、できるだけ多くの文字を探しています(。*は貪欲です)。最後の文字は\w文字です。これを試してください(正規表現の簡単な編集)。、の存在の有無にかかわらずwww.ドメイン、および2文字または3文字のtldを持つドメインで機能する必要があります。

https?\:\/\/(www\.)?\w*?\.\w{2,3}(?=[\W])
于 2013-01-15T17:10:47.653 に答える
0
https?\:\/\/((www\\.)?\w*?(\\.\w{2,7})+)(?=\\.|\\,|\\?|\\!|\s)

(?=\\.|\\,|\\?|\\!|\s)これはあなたが探していた部分だと思いますか?

于 2013-01-15T19:53:23.473 に答える
0

@MikeMの回答のおかげで、句読点を省略して、リンクと電子メールアドレスを置き換えるために彼を使用して処理を生成することができました(他の人が必要とする場合の参照用にここにあります:

/**
 * Replace URLs and Emails with HTML links
 *
 * This function will replace all URLs and Email Addresses wrapped in HTML links, ONLY if one does not already exist,
 * excluding punctuation (email or url followed by period, comma, etc).
 *
 * @param $content
 *
 * @return string
 * @since 1.0.0
 *
 */
function replace_links( $content ) {

    $content = preg_replace( '"<a[^>]+>.+?</a>(*SKIP)(*FAIL)|(https?:\/\/\S+?)(?=[.,!?]?(\s|$))"', '<a href="$0">$0</a>', $content );
    $content = preg_replace( '"<a[^>]+>.+?</a>(*SKIP)(*FAIL)|(\S+@\S+\.\S+?)(?=[.,!?]?(\s|$))"', '<a href="mailto:$0">$0</a>', $content );

    return $content;
}

最新の要点を確認してください: https ://gist.github.com/tripflex/0cc930c2afe5f4c73f2aed61cedf95d0

于 2022-02-02T00:37:35.430 に答える