我有一個簡單的腳本來匹配系列劇集代碼,如S01E02或s09e11。這個想法是找到提供的文本中的所有插曲代碼,並創建一個包含所有發現節目的對象數組。正則表達式「gi」修飾符的組合不適用於單個單詞
我首先使用match()
來獲取所有匹配代碼的數組,然後我通過代碼循環來提取季節和劇集編號。
問題是,當我用同樣的正則表達式圖案既尋找所有比賽,並提取情節細節/gi
改性劑,我得到一個錯誤:Uncaught TypeError: Cannot read property '1' of null
(參見控制檯輸出)。
案例1(不及格) - fiddle 1
var episodePatternGI = /s(\d{1,2})e(\d{1,2})/gi;
var matches = 'S3E1 hehehe bla s09e12'.match(episodePatternGI);
var episodes = [];
matches.forEach(function(val) {
var ep = episodePatternGI.exec(val);
episodes.push({
s: ep[1],
e: ep[2]
});
});
console.log(episodes);
案例2(工作) - fiddle 2
var episodePatternGI = /s(\d{1,2})e(\d{1,2})/gi;
var matches = 'S3E1 hehehe bla s09e12'.match(episodePatternGI);
var episodes = [];
var episodePatternI = /s(\d{1,2})e(\d{1,2})/i; // g modifier removed
matches.forEach(function(val) {
var ep = episodePatternI.exec(val); // New pattern applied
episodes.push({
s: ep[1],
e: ep[2]
});
});
console.log(episodes);
正如你所看到的,在第二case我使用相同的模式,但g
修改器被刪除。
爲什麼第一種情況不起作用?
準確地說我正在尋找答案。 – lesssugar
噢,你打我答案。我正要提交 – 4castle
儘管如此,實際上可能會使用lastIndex來獲得優勢,只需循環exec()直到它返回null。因爲目前正則表達式的使用量是其需要量的兩倍。跳過匹配數組部分。 – 4castle