0

我在 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 吗?

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

4

1 回答 1

1

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

来自MDN.test()文档

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

在这种情况下,我认为您不需要该g标志,因为您正在匹配字符串末尾预期的文件扩展名 - 您甚至可能希望明确地使用$

/([b-z])((\.mp3)|(\.wav))$/i
于 2012-08-08T22:26:09.983 回答