0

正規表現を使用してURIセグメントを取得しようとしています。

URIの例:

http://abc.com/hello/hi/bye?humm/ok=hi&ya=yaya/wow/waaah
               ^^^^^ ^^ ^^^                    ^^^ ^^^^^

やっています:

/(?<=\/)[\w-]+(?=(\/|$|\r|\?))/g

しかし、それは正しく機能していません。クエリ文字列が除外されていません(wow/waaah)。

したがって、次のことを試したところ、すべてが除外されました。

/(?<!?.+)(?<=\/)[\w-]+(?=(\/|$|\r|\?))/g

これの何が問題になっていますか?

4

1 に答える 1

1

?2番目の正規表現で2番目をエスケープするのを忘れました。それは読むべきです:

/(?<!\?.+)(?<=\/)[\w-]+(?=(\/|$|\r|\?))/g

注:次のような文字クラスを使用すると、正規表現を改善できます。

/(?<!\?.+)(?<=\/)[\w-]+(?=[/\r\n?]|$)/g

編集:

正規表現のすべての異なるフレーバーに対応するための最小公分母ソリューションには、2つのステップのプロセスが必要です。

  • ?末尾の文字とそれに続くすべての文字(存在する場合)を削除します。


    ^[^/]+//[^/]+([^?]+)

    キャプチャグループ1で返された文字列を保持します。

  • 以下をループしてURIセグメントを抽出します。


    /([\w-]+)

    セグメントはキャプチャグループ1に返されます。

于 2013-01-24T23:53:56.960 に答える