2016-08-30 3 views
1

I가 다음 원래 문자열 :만들기 일부

# Desired result 
js/main_dev.js 
js/blog/foo_dev.js 
js/blog/foo_dev.min.js 

을 그래서 기본적으로 :

# Original strings 
js/main_dev.js # This one is just to check for false positives 
js/blog/foo.js 
js/blog/foo.min.js 

내가 하나 하나에 대체 정규식을 실행하고이와 끝까지 싶습니다 _dev 앞에 .min.js을 추가하고, 그렇지 않으면 .js 앞에 추가하십시오. 이는 js/blog 또는 js/calculator으로 시작하고 .js으로 끝나는 문자열에만 적용해야합니다.

처음에는 (js\/(?:blog|calculators)\/.+)(\.min\.js)$을 정규식으로 시작한 다음 $1_dev$2을 대체로 사용했습니다. 제 세 번째 문자열에는 효과가 있지만 제 두 번째는 분명하지 않습니다. 나는 "어려워서".min.js을 찾고 있습니다. 그래서 나는 과 같은 ?과 함께 비 캡처 그룹에 던져서 .min을 옵션으로 만들 것이라고 생각했습니다. 지금이 내 두 번째 문자열을 작동하지만 세 번째 문자열은 모든 구타이다 : 나는 단순히 (\.min\.js|\.js)하지만 아무 소용에, 같은 동작의 모든 결과를 일을 포함하여이 많은 순열을 시도했습니다

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

. 여기에 "나쁜"정규식이있는 Regex 101 붙여 넣기가 있습니다. https://regex101.com/r/bH3yP6/1

여기서 내가 뭘 잘못하고 있니?

+0

과속 저를 체포 같은 이름을 가진 헌병이있다. –

+1

@CasimiretHippolyte : 당신의 regexes가 너무 빠르기 때문입니다 :) –

+0

나는이 시점에서 정규 표현식을 모르거나 Turpin gendarme도 모르지만, 그는 쌍안경을 사용하는 방법을 알고있었습니다. –

답변

6

시도 던지는 첫 번째 그룹의 끝에 +? (비 캡처 한)는 게으른 (비 욕심)로 설정하려면 :

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

(?:\.min)?는 선택 사항이며 .+입니다 욕심이 많으므로 .+.min을 캡처 중입니다.

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

+0

아 물론. 그게 다야. 정말 바보 같은. 고맙습니다! 나는 네가 초보다 빨랐 기 때문에 네가 허락 할 때 네 대답을 받아 들일거야. –

관련 문제