ホームページ  >  記事  >  ウェブフロントエンド  >  lastIndex と正規表現の関係

lastIndex と正規表現の関係

php中世界最好的语言
php中世界最好的语言オリジナル
2018-03-29 11:02:351806ブラウズ

今回は、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。