複数 JavaScript Regexを使用して、テキストフィールド内のURLと一致させる




javascript 正規表現 抽出 (7)

私のためにこれを試してみてください

/^((ftp|http[s]?):\/\/)?(www\.)([a-z0-9]+)\.[a-z]{2,5}(\.[a-z]{2})?$/

それはとても簡単で分かりやすい

正規表現を設定して、URLがjavascriptのテキストブロックに含まれているかどうかをテストする方法はありますか? 私はこれを達成するために使用するパターンをかなり理解することはできません

 var urlpattern = new RegExp( "(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?"

 var txtfield = $('#msg').val() /*this is a textarea*/

 if ( urlpattern.test(txtfield) ){
        //do something about it
 }

編集:

だから私はパターンが私が今必要なもののための正規表現のテスターで動作しているが、クロムはエラーをスローする

  "Invalid regular expression: /(http|ftp|https)://[w-_]+(.[w-_]+)+([w-.,@?^=%&:/~+#]*[[email protected]?^=%&/~+#])?/: Range out of order in character class"

次のコードの場合:

var urlexp = new RegExp( '(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?' );

私はあなたの正規表現をきれいにしました:

var urlexp = new RegExp('(http|ftp|https)://[a-z0-9\-_]+(\.[a-z0-9\-_]+)+([a-z0-9\-\.,@\?^=%&;:/~\+#]*[a-z0-9\[email protected]\?^=%&;/~\+#])?', 'i');

テストされ、うまく動作します;)


(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?


new RegExpを使用しているときは、バックスラッシュをエスケープする必要があります。

また、ダッシュを置くことができます-文字クラスの最後に、それを避けるために。

& 文字クラスの中には& or a or m or p or ; あなたは&;を入れる必要があり;a, m and pはすでに\wマッチしています。

したがって、正規表現は次のようになります。

var urlexp = new RegExp( '(http|ftp|https)://[\\w-]+(\\.[\\w-]+)+([\\w-.,@?^=%&:/~+#-]*[\\[email protected]?^=%&;/~+#-])?' );

多くのURLフォーマットでこの正規表現を試してみてください

/(([A-Za-z]{3,9})://)?([-;:&=\+\$,\w][email protected]{1})?(([-A-Za-z0-9]+\.)+[A-Za-z]{2,3})(:\d+)?((/[-\+~%/\.\w]+)?/?([&?][-\+=&;%@\.\w]+)?(#[\w]+)?)?/g

問題は、文字クラス(括弧)の " - "が範囲として解析されていることです。[az]は "aとzの間の任意の文字"を意味します。 Vini-Tが示唆するように、文字クラスの " - "文字をバックスラッシュでエスケープする必要があります。


ここでは、最も完全な1つのURL解析パターンがあります。

これは、任意の部分文字列のANY URI / URLで動作します!

https://regex101.com/r/jO8bC4/5

出力を伴うJSコードの例 - すべてのURLは、 'parts'の5つの部分からなる配列に変換されます:

var re = /([a-z]+\:\/+)([^\/\s]*)([a-z0-9\[email protected]\^=%&;\/~\+]*)[\?]?([^ \#]*)#?([^ \#]*)/ig; 
var str = 'Bob: Hey there, have you checked https://www.facebook.com ?\n(ignore) https://github.com/justsml?tab=activity#top (ignore this too)';
var m;

while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    console.log(m);
}

次のようになります:

["https://www.facebook.com",
  "https://",
  "www.facebook.com",
  "",
  "",
  ""
]

["https://github.com/justsml?tab=activity#top",
  "https://",
  "github.com",
  "/justsml",
  "tab=activity",
  "top"
]

BAM! RegEx FTW!







regex