正規表現オブジェクトのlastIndex属性
1336 ワード
正規表現オブジェクトのlastIndex属性
jsには正則表現の使用方法が二つあり、一つは正則表現オブジェクトの方法であり、一つは文字列オブジェクトの方法であり、前者はexec(str)、test(str)の2つの方法があり、後者はmatch(regexp)、replace(regexp)、search(regexp)、split(search)の4つの方法がある.正規表現オブジェクトとして使用する場合は、特にそのlastIndex属性に注意してください.
1
2
3
4
5
これは正規表現のオブジェクトであるlastIndex属性が怪しまれています.lastIndexは文面では最後の索引という意味ですが、実際には正規表現から次の検索のインデックス位置を意味しています.最初の検索はいつも0で、最初の検索が終わった時はlastIndexの値を該当文字列の最後の文字の索引位置に1を追加し、二番目の検索はlastIndexという位置から始まります.後はこれを類推する.見つけられなかったら、lastIndexを0にリセットします.注目すべきは、lastIndex属性はグローバルフラグ正規表現の中でしか機能しません.上のコードの中で正規表現のgフラグを削除すれば、3回目のポップアップはtrueです.
exec()メソッドも同じです.exec()メソッドは配列を返します.配列の最初の要素はマッチした文字列です.その後の要素はそれぞれマッチした文字列に対応します.すなわち、正規表現は括弧で囲まれています.exec()メソッドを使用した正規表現にグローバルフラグがない場合は、最初のマッチだけになります.正規表現にグローバルフラグがある場合は、exec()を使って、nullに戻るまでのすべてのマッチを得ることができます.つまり、マッチが見つかりません.ここでは、同じ正規表現のexec()方法を循環的に使用できます.グローバルフラグ付き正規表現は、一致するたびにlastIndexの値を次の検索整合の起点として更新します.
最後に説明するのは文字列の正則的な方法ではlastIndex属性は機能しません.正則モードがグローバルであるかどうかにかかわらず.
jsには正則表現の使用方法が二つあり、一つは正則表現オブジェクトの方法であり、一つは文字列オブジェクトの方法であり、前者はexec(str)、test(str)の2つの方法があり、後者はmatch(regexp)、replace(regexp)、search(regexp)、split(search)の4つの方法がある.正規表現オブジェクトとして使用する場合は、特にそのlastIndex属性に注意してください.
1
2
3
4
5
var
regexp = /abcd/g;
var
str =
'abcdefg'
・;
alert(regexp.test(str));
//true
alert(regexp.test(str));
//false
alert(regexp.test(str));
//true
上のコードの運行の結果はそれぞれtrue、false、trueを弾いて、同じ正規のモードを使うことを考慮して、ちょっと迷っていませんか?これは正規表現のオブジェクトであるlastIndex属性が怪しまれています.lastIndexは文面では最後の索引という意味ですが、実際には正規表現から次の検索のインデックス位置を意味しています.最初の検索はいつも0で、最初の検索が終わった時はlastIndexの値を該当文字列の最後の文字の索引位置に1を追加し、二番目の検索はlastIndexという位置から始まります.後はこれを類推する.見つけられなかったら、lastIndexを0にリセットします.注目すべきは、lastIndex属性はグローバルフラグ正規表現の中でしか機能しません.上のコードの中で正規表現のgフラグを削除すれば、3回目のポップアップはtrueです.
exec()メソッドも同じです.exec()メソッドは配列を返します.配列の最初の要素はマッチした文字列です.その後の要素はそれぞれマッチした文字列に対応します.すなわち、正規表現は括弧で囲まれています.exec()メソッドを使用した正規表現にグローバルフラグがない場合は、最初のマッチだけになります.正規表現にグローバルフラグがある場合は、exec()を使って、nullに戻るまでのすべてのマッチを得ることができます.つまり、マッチが見つかりません.ここでは、同じ正規表現のexec()方法を循環的に使用できます.グローバルフラグ付き正規表現は、一致するたびにlastIndexの値を次の検索整合の起点として更新します.
最後に説明するのは文字列の正則的な方法ではlastIndex属性は機能しません.正則モードがグローバルであるかどうかにかかわらず.