正则表达式检查循环中的 [A-Z] 范围



我在jsfl中这样做,它使用javascript语法。

我想检查不是序列中第一个的 mp3 或 wav 文件。循环为变量"audioFile"提供以下值(---a.mp3,-----b.mp3,----c.mp3)。然后我使用以下代码检查变量:

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

对于 -----b.mp3返回 true,但对于 ---a.mp3 和 ----c.mp3,返回 false。"b"和"c"文件不应该返回 true 吗?

如果我将其更改为 [a-z],它为 ---a.mp3 和 ----c.mp3返回 true,但对于 -----b.mp3 返回 false。这三个声音文件名不应该都返回 true 吗?

问题是您使用相同的正则表达式对象在全局g标志集的情况下多次进行测试。

来自 MDN .test() doco:

"与exec(或与之结合使用)一样,在同一全局正则表达式实例上多次调用的测试将超越前一个匹配项。

在这种情况下,我认为您不需要 g 标志,因为您正在匹配字符串末尾预期的文件扩展名 - 您甚至可能希望使用 $ 显式执行此操作:

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

最新更新