2016-05-03 8 views
2

私は私のニーズのために、この正規表現を採用しようとしている:はJavaScript:正規表現 - 返さないMATCH1 MATCH2など

(?:^|\s)(?:https?:\/\/)?(?:\w+(?=\.).)?(?<name>.*).(?<tld>(?<=\.)\w+) 

デモ: https://regex101.com/r/lI2lB4/2

は私がすべてのエントリの一致を返したいです以下のような:

  • www.example.com
  • example.com

なく

今すぐ上に示した正規表現が正常に動作しているが、それは異なるマッチ(マッチ1マッチ2、...)を返します - しかし、1つの結果だけを取得したいと思い:Matchingまたはnot matching。上記の正規表現が「有効」返すように常にいるようだ:私は問題がある

regExDomain.test($regExDomain.test(input.val())) 
{ 
console.log('valid'); 
} 
else 
{ 
console.log('invalid'); 
} 

を使用したい結果

それを行うにはどのように任意のアイデア?

+1

どのようにそれを使用していますか?何語?正規表現が正常に動作している場合、問題は使用方法にあります。 – nickb

+0

こんにちは。 JS(jQuery)で使用しています。正規表現がtrueを返す場合、私は他の関数をトリガーしています。関数が常にトリガされるので、与えられたregExは常に真であると思われます...私は最初の質問を追加して少し良く説明しました... – MyFault

+0

返される一致の数はどうして重要ですか?一致するものがあればそれを返し、そうでなければ一致させます。あなたはデータをキャプチャする '()'を使用しているので、複数のマッチがあります。 – IMTheNachoMan

答えて

1

のRegexクラスのtest()関数は、入力がパターンにマッチするかどうかを検証するために十分でなければなりません。

var pattern = /^(http[s]?:\/\/)?(www\.)?([^\.]+)\.[^\.]{2,3}$/ 
var regex = new RegExp(pattern); 

for(var i=1; i<=3; i++) { 
    if (regex.test($("#text"+i).text())) 
     $("#isMatch"+i).html("MATCHES"); 
    else 
    $("#isMatch"+i).html("DOESN'T MATCH"); 
} 

jsfiddle例:あなたはこのような何かを行うことができ

http://jsfiddle.net/jyu16m89/1/

上記の例は、(例えば、 ".digital" または ".menu")、拡張ドメインのためにfalseを返します。あなたのパターンに含めたい場合は、(例えばhttp://stackoverflow.com/questions/のようなエントリのためにtrueを返す)あなたのパターンでサブドメイン/フォルダを含めたい場合は、{2,3}+によって

を置き換え、(これはに文字列を制限しないドル記号を削除終わり)。

0

nがマッチしたグループの数であることがmatch[n]を返しますので、あなたは、グループ化された正規表現を持っています。何もその後、一致しない場合は、結果としてnullを取得します:

function isUrl(myString) { 
    var match = myString.match('/(?:^|\s)(?:https?:\/\/)?(?:\w+(?=\.).)?(?<name>.*).(?<tld>(?<=\.)\w+)/'); 
    if(match !== null) { 
    return true; 
    } 
    return false; 
}