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が返されます。3つのサウンドファイル名すべてがtrueを返す必要はありませんか?

4

1 に答える 1

1

問題は、同じ正規表現オブジェクトを使用して、グローバルgフラグを設定して複数回テストしていることです。

MDN .test()docoから:

「exec(またはそれと組み合わせて)と同様に、同じグローバル正規表現インスタンスで複数回呼び出されたテストは、前の一致を超えて進みます。」

この場合、文字列の最後に期待されるファイル拡張子に一致しているため、フラグは必要ないと思います。明示的に:gを使用してこれを行うこともできます。$

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