今回は、lastIndex と正規表現の関係と、lastIndex と正規表現を使用する際の注意事項についてお届けします。実際のケースを見てみましょう。
はじめに
今日、正規表現を使用して同じ文字列をチェックすると、trueとfalseが交互に返される問題が発生しました。絶望して、もう一度権威あるガイドに目を通したところ、犯人は lastIndex であることがわかりました。コンソールで試すことができます
let reg = /[\d]/g //undefined reg.test(1) //true reg.test(1) //false
lastIndex
lastIndexは、権威あるガイドで次のように説明されています: これは読み取り/書き込み整数です。一致するパターンに g 修飾子がある場合、この属性は文字列全体の次のインデックスの先頭に格納され、exec() および test() によって使用されます。引き続き上記の例を使用して、lastIndex 属性を観察します
let reg = /[\d]/g //有修饰符g //undefined reg.lastIndex //0 reg.test(1) //true reg.lastIndex //匹配一次后,lastIndex改变 //1 reg.test(1) //从index 1 开始匹配 //false reg.lastIndex //0 reg.test(1) //true reg.lastIndex //1
test() を初めて使用して一致に成功した後、2 回目に test() を使用した場合、lastIndex は一致の終了位置に設定されます。時刻になると、インデックス 1 からマッチングが開始され、マッチングは失敗し、lastIndex は 0 にリセットされます。これにより、マッチング結果が期待と一致しなくなります
解決策
1. g 修飾子を使用しないでください
reg = /[\d]/ ///[\d]/ reg.test(1) //true reg.test(1) //true reg.lastIndex //0 reg.test(1) //true reg.lastIndex
2. test() の後に lastIndex = 0 を手動で設定します
この記事の事例を読んだあなたはその方法をマスターしました。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨書籍:
正規表現での D メタキャラクター (「[^0-9]」に相当) の使用の詳細な説明
以上がlastIndex と正規表現の関係の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。