1

3 つ以上出現する場合は、最後のスラッシュを置き換える必要があります。このようなパスがある場合"/foo/bar/"、それは になるはず"/foo/bar"です。ただし、次のようなパスに"/foo/"は触れないでください。

エスケープされたスラッシュ ( \/) と量指定子 ( {3,})で試してみました。

/\/{3,}$/

ただし、この正規表現は、スラッシュの直後にあるスラッシュのみに一致します。"/foo/bar///"

この問題を解決する方法はありますか? 多分正/負lookaheadで?

http://www.regexr.com/393pm

視覚化するには:

"/foo/"         => "/foo/"
"/foo/bar/"     => "/foo/bar"
"/foo/bar/baz/" => "/foo/bar/baz"

FedeAvinash RajAmal Muraliに感謝します。パフォーマンスは重要なので、@Fede が勝者です: http://jsperf.com/match-last-slash-if-there-are-at-least-nth-occurrences

4

3 に答える 3

1

これはどう?

^((?=\/.*?\/.*?\/).*?)([\/]+)$

すべてを最初にキャプチャされたグループに置き換えます。

デモ

于 2014-07-03T17:48:44.913 に答える