2011-01-17 16 views
1

私はRegExのコンセプトを理解していますが、これは実際に私が実際に自分自身を書くことを試みた最初の時です。RegEx - 一致前の文字でない

プロジェクトの一環として、特定のドメイン(実際にはドメインの配列ですが、単純にしておきましょう)に一致する文字列を解析しようとしています。

は、最初に私はこれを始めた:

url.match('www.example.com') 

しかし、私はまた、このように入力を得ていた気づい:

http://www.someothersite.com/page?ref=http://www.example.com

これらの行意志当然の試合のためにwww.example.comですが、除外したいと思います。そこで、私はこれらの行に沿って考えていました。www.example.comを含む行だけを一致させますが、?文字の後には一致させないでください。これは私が思い付いたものです:

var reg = new RegExp("[^\\?]*" + url + "(\\.*)", "gi"); 

しかし、これは私が、私はまだ問題に持ってなけなしの知識使用していた恐れとして任意の提案をいただければ幸いです、動作するようには思えません。

編集: いくつかの説明。

  • 入力はGET要求に記録されます。これらから、私はいくつかのドメインを除外したいと思っています。これらは0〜1の任意のサブドメイン(example.com,、www.somethirdsite.comおよびweb.example.netがすべて有効である必要があります)を処理する必要があります。これらは変数に格納されます。
  • 上記のリクエストが見つかりましたが、http://www.someothersite.com/page?ref=https://www.example.comhttp://www.someothersite.com/page?ref=www.example.comも処理できるようにしたいと思います。つまり、針がリクエストドメインの一部ではなくリクエストデータの一部である場合、私は一致。
+0

Danneth、正規表現であまりにもうんざりしないでください。受け入れる拒否する入力のテストを書いてください。正規表現がこれらのテストを満たしていればそれを使用してください。さもなければ、あなたは本質的に些細なことである多くの時間を無駄にすることができます。 –

+0

また、あなたの問題を解決する答えを受け入れる、参考になる回答をupvoteしてください。 –

答えて

1

編集:ここでは、任意のドメインの変更正規表現は次のとおりです。

RegExp("(^|\\s)(https?://)?(\\w+\\.)?" + url, "gi"); 

ここでの考え方は、あなたが内側になるように、それを不可能にするいくつかの空白文字が先行URLのみに一致していることですクエリ。

+0

多分私は思っていますが、私の最初の例と同じではありませんか?どのように "/ https ?:"が機能するかはわかりません。また、言及するのを忘れていましたが、「www」部分があるという保証はありません。これはワイルドカードの種類が必要であることを意味します。 – danneth

+0

@danneth: 'https? 'についてあなたを混乱させるものは何ですか? – SilentGhost

+0

私は実際に何を知りませんでしたか?私はこれについて新しいことを言った:今、私はウィキペディアはそれが "前のパターン要素と0回または1回マッチする"と定義していることを知っている。それはあなたの例をよりよくフィットさせます。 (上記では指定されていませんが)第2の部分には常に別のhttpが含まれているかどうかはわかりませんが(おそらくそれはそうです)。 – danneth

関連する問題