2012-08-08 59 views
0

我在使用JavaScript語法的jsfl中執行此操作。正則表達式檢查循環中的[a-z]範圍

我想檢查不是序列中第一個的mp3或wav文件。循環向變量'audioFile'提供以下值(--- a.mp3,----- b.mp3,---- c.mp3)。然後我使用此代碼檢查變量:

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

這將返回真----- b.mp3但假的--- a.mp3和---- c.mp3。 'b'和'c'文件不應該返回true嗎?

如果將其更改爲[a-z],它會返回--- a.mp3和---- c.mp3的真實值,但它會返回false ----- b.mp3。不是所有三個聲音文件名都返回true嗎?

+0

我假設---- c.mp3文件有一個大寫字母? – 2012-08-08 21:57:13

+0

所以,如果我理解正確,你有一個逗號分隔的歌曲名稱的擴展名列表,你想檢查除了第一個有效的擴展名的所有人? – elclanrs 2012-08-08 22:04:19

+0

@AlexW沒有c.mp3是小寫字母。如果我將正則表達式更改爲[a-z],'c'甚至會返回true。正如我使用'我'的標誌,我認爲它不應區分大小寫。 – 2012-08-08 22:10:50

回答

1

問題是,您正在使用相同的正則表達式對象以全局g標誌集進行多次測試。

MDN .test() doco

「與EXEC(或與之結合),測試多次調用同一全局正則表達式實例將提前超越了上一次的比賽。」

在這種情況下,我不認爲你需要的g標誌,因爲你的匹配達到預期的字符串結尾的文件擴展名 - 你甚至可以用$做到這一點明確:

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