2016-08-30 2 views
1

私は、次の元の文字列を持っているを作ります_devの前に.min.jsを追加し、存在しない場合は.jsの前に追加します。これは、js/blogまたはjs/calculatorで始まり、.jsで終わる文字列にのみ適用する必要があります。は、JavaScriptの正規表現の一部オプション

最初は(js\/(?:blog|calculators)\/.+)(\.min\.js)$を正規表現として開始し、次に$1_dev$2を置換として開始しました。それは私の第3のストリングのために働くが、明らかに私が "ハード"のために.min.jsを探しているので、私の2番目のストリングには当てはまらない。だから、のように?の非キャプチャグループに投げて、.minをオプションにすることを考えました。さて、これは私の2番目の文字列のために動作しますが、私の3番目の文字列は、すべての調子が悪いです:

js/main_dev.js # Good 
js/blog/foo_dev.js # Good 
js/blog/foo.min_dev.js # Bad! _dev should be before the .min 

私は、単に(\.min\.js|\.js)をやってますが、無駄に含め、同じ行動ですべての結果をこの上で多くの順列を試してみました。ここでは、正規表現の101のペーストは、 "悪い"正規表現:https://regex101.com/r/bH3yP6/1

私はここで間違っていますか?

+0

スピード違反のために私を逮捕した同じ名前の憲兵があります。 –

+1

@CasimiretHippolyte:あなたの正規表現が速すぎるからです。 –

+0

私はこの時点で正規表現を知らず、Turpinもgendarmeしていませんでしたが、彼は双眼鏡の使い方を知っていました。 –

答えて

6

は(非欲張り)それは怠惰作るためにあなたの最初のグループ(非キャプチャ1)の終わりに+?を投げてみてください。

(js\/(?:blog|calculators)\/.+?)((?:\.min)?\.js)$

(?:\.min)?はオプションで、.+です貪欲なので、.+.minをキャプチャしていました。

https://regex101.com/r/bH3yP6/3

+0

もちろん、それはそれでした。くだらない。ありがとうございました!私はあなたが秒単位で速くなって以来、私が許可されたときにあなたの答えを受け入れるでしょう。 –