我有一个简单的脚本来匹配系列剧集代码,如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