2012-08-08 2 views
0

자바 스크립트 구문을 사용하는 jsfl에서이 작업을 수행하고 있습니다.루프에서 [az] 범위의 정규식 검사

시퀀스의 첫 번째가 아닌 MP3 또는 wav 파일을 확인하고 싶습니다. 루프는 변수 'audioFile'에 다음 값 (--- a.mp3, ----- b.mp3, ---- c.mp3)을 제공합니다. 나는 다음이 코드를 사용하여 변수를 확인하십시오

var patt=/([b-z])((\.mp3)|(\.wav))/gi; 
if(patt.test(audioFile)){} 

이가 true를 돌려 ----- b.mp3하지만 대한 --- a.mp3과 ---- c.mp3 거짓. 'b'및 'c'파일이 true를 반환하면 안됩니까?

[a-z]로 변경하면 --- a.mp3 및 ---- c.mp3에 대해 true를 반환하지만 ----- b.mp3에 대해서는 false를 반환합니다. 세 가지 사운드 파일 이름이 모두 true가 아니어야합니까?

+0

---- c.mp3 파일에 대문자가 있다고 가정합니다. –

+0

그래서 올바르게 이해한다면 확장자와 함께 쉼표로 구분 된 노래 이름 목록을 가지며 첫 번째 것을 제외한 모든 유효한 확장자를 확인하고 싶습니까? – elclanrs

+0

@AlexW 아니오 c.mp3은 소문자입니다. regex를 [a-z]로 변경하면 'c'도 true를 반환합니다. 'i'플래그를 사용 했으므로 대소 문자를 구분해서는 안됩니다. –

답변

1

문제는 동일한 정규식 개체를 사용하여 글로벌 g 플래그가 여러 번 테스트되는 것입니다. MDN .test() doco에서

는 :

"간부와 마찬가지로 (또는와 함께), 테스트는 이전 경기 끝에 진행될 것 같은 글로벌 정규 표현식 인스턴스를 여러 번했다." 이 경우

난 당신이 문자열의 끝에서 기대되는 파일 확장자까지 일치하고 있기 때문에 당신의 g 플래그를 필요가 있다고 생각하지 않는다 - 당신도 $ 명시 적으로 그렇게 할 수 있습니다 :

/([b-z])((\.mp3)|(\.wav))$/i