0

一連のコードが正しいタイプのページでのみ実行されるように、URL の特定のパターンをチェックしています。現在、私は次のようなものを持っています:

/^http:\/\/www\.example\.com\/(?:example\/[^\/]+\/?)?$/;

したがって、trueforexample.comとが返されますexample.com/example/anythinghere/。ただし、この Web サイトは?postCount=25URL の末尾に または などの引数を追加することがあるため、次のようになります。

example.com/example/anythinghere/?postCount=25

このため、現在の式を条件式に入れると、URL 引数があると false が返されます。オプションのURL 引数ワイルドカードを許可するように正規表現を変更するにはどうすればよいでしょうか。疑問符の後に追加情報が続く場合は常に true が返され、省略された場合でも true が返されます。 ?

次の場合は true を返す必要があります。

http://www.example.com/?argumentshere

http://www.example.com/example/anythinghere/?argumentshere

追加の引数のない同じ URL と同様に。

4

3 に答える 3

0

コメントを回答にア​​ップグレードする:

 /^http:\/\/www\.example\.com\/(?:example\/[^\/]+\/?)?$/;

意味:

 /^    # start of string
      http:\/\/www\.example\.com\/  #literal http://www.example.com/
      (?:           
         example\/[^\/]+\/? #followed by example/whatever (optionally closed by /)
      )?
      $ end-of-string
  /

ここでの主な問題は、要件(「オプションのクエリ文字列が続く」 )が正規表現( end-of-stringが必要)と一致しないことです。次の方法で解決します。

 /^    # start of string
      http:\/\/www\.example\.com\/  #literal http://www.example.com/
      (?:           
         example\/[^\/]+\/? #followed by example/whatever (optionally closed by /)
      )?
      (\?|$) followed by either an end-of-string (original), or a literal `?` (which in url context means the rest is a query string and not a path anymore).
  /
于 2013-10-19T00:39:02.897 に答える
0

パラメーターなしで URL を作成し、それを現在の式と比較できます。

location.protocol + '//' + location.host + location.pathname

JavaScriptでパラメータなしでURLを取得するには?

于 2013-10-17T20:19:55.513 に答える