2016-11-30 18 views
0

ドメイン名と文字列を一致させる必要があります。唯一http://www.some.comとスニペットの試合以上正規表現はドメイン名と一致する

var str=" with http match http://www.some.com and normal website type some.com and with www.some.com "; 
 
var url = /(http|ftp|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\[email protected]?^=%&\/~+#-])?/g; 
 
console.log(str.match(url))

しかし、私は3つのタイプに一致する必要があります。

  1. http://www.some.com
  2. www.some.com
  3. some.com

result.Iは、スタックオーバーフローからこの正規表現パターンを得るregex.Iには非常によくないです見つける私を助けてください。しかし、3つの条件に満足していない。

+2

接頭辞 '(...)'を接頭辞とし、オプションの演算子 '? 'を使用します。 – Fallenhero

+0

私の答えをご覧ください。デモもあります。 – Fallenhero

答えて

2

使用

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

これだけ(キャプチャ?:なし)HTTP/FTP/...オプションになり

ここでは例を参照してください。demo

やグラフィックhere

+0

注!'&'は '&'(アンパサンド)、 'a'、' m'、 'p'、'; 'とそれぞれマッチします。私は推測しない;)単に '&'を使う。 – ClasG

+0

私は、質問者からの正規表現をコピーしました – Fallenhero

0

としてUnicode文字を一致させるには、次の文字を使用してください。

(ftp:\/\/|www\.|https?:\/\/)?[a-zA-Z0-9u00a1-\uffff0-]{2,}\.[a-zA-Z0-9u00a1-\uffff0-]{2,}(\S*) 

Demo here

-1

var pattern = /((https|http|ftp){1}:\/\/)?(www\.)?\w+\.\w{2,4}/ig; 
 
var test = ['http://www.some.com/NotRelevant', 
 
    'https://www.some.com/NotRelevant', 
 
    ':/www.some.com/NotRelevant', 
 
    'www.some.com/NotRelevant', 
 
    'some.com/NotRelevant' 
 
]; 
 
for (var t = 0; t < test.length; t++) { 
 
    console.log(test[t], test[t].match(pattern)); 
 
}

+0

も ​​':/ www.some.com'にマッチします – Fallenhero

1

として、あなたは、たとえば、()?で正規表現の一部をオプションにすることができ、前にも言った:(http:\/\/)?(www\.)?(some\.com)。そのため、おそらくあなたのコード、このような何かを持つ:

var str=" with http match http://www.some.com and normal website type some.com and with www.some.com but matched http://----.-.-.-. and now will match ----.-.-.-."; 
 
\t var url = /((http|ftp|https):\/\/)?[\w-]*(\.[\w-]+)+([\w.,@?^=%&amp;:\/~+#-]*[\[email protected]?^=%&amp;\/~+#-])?/g; 
 
\t console.log(str.match(url))

しかし、正規表現、あなたが"http://----.-.-.-."のような一致文字列を提供し、この変更で、それは今、何をされていない、例えば----.-.-.-.と一致します欲しいです。 本当にURIにマッチさせる場合は、別の正規表現を使用する必要があります。ここで

は、あなたがこの回答を改善するのに役立ついくつかのリソースです: https://regex.wtf/url-matching-regex-javascript/

は、RFCが引用されているWhat is the best regular expression to check if a string is a valid URL?を参照してください。http://www.faqs.org/rfcs/rfc3987.html

注:彼らはすべての"http://----.-.-.-."と一致するように見えるので、多分あなたの正規表現はあまりないです悪い

関連する問題