JS|正規表現(3):グローバルフラグとtest()、exec()
4091 ワード
正規表現を学習し、複数のサンプルを作成しようとしたときにエラーが発生しました.これは、次の方法でグローバルタグを使用するとlastIndexプロパティが更新されるためです.今回触れたミスを整理する.
Question
「who」を含む文字列または含まない文字列が複数作成され、「who」のみを含む文字列の配列が作成されます.しかし、正規式
文字列
理由は
メソッドが
MDN|グローバルタグとtest()
Question
「who」を含む文字列または含まない文字列が複数作成され、「who」のみを含む文字列の配列が作成されます.しかし、正規式
/who/
のコードと/who/g
のコードを用いた結果は異なる.文字列
'who is it'
は、正規式/who/g
において検索されなかった.const tgStrs = [
'who is who',
'who is it',
'it is who',
'what is it',
'what who what'
];
const regExp = /who/;
const regExp_g = /who/g;
const passedStrs = tgStrs.filter(tg => regExp.test(tg));
const passedStrs_g = tgStrs.filter(tg => regExp_g.test(tg));
// 정규표현식 /who/를 사용한 결과
console.log(passedStrs);
/*
(4) ["who is who", "who is it", "it is who", "what who what"]
0: "who is who"
1: "who is it"
2: "it is who"
3: "what who what"
*/
// 정규표현식 /who/g를 사용한 결과
// 'who is it'이 매칭되지 않음
console.log(passedStrs_g);
/*
(3) ["who is who", "it is who", "what who what"]
0: "who is who"
1: "it is who"
2: "what who what"
*/
Answer理由は
test()
のlastIndex
属性です.この点はexec()
の方法においても同様である./who/g
のように.test()
または.exec()
の方法でグローバルタグが使用される場合、方法は文字列を検索し、その位置をlastIndex
の属性に格納する.次のターゲット文字列を検索する場合は、格納されているlastIndex
の位置から開始します.メソッドが
true
lastIndex
を返すと増加し続け、false
またはnull
を返すと0
となる.MDN|グローバルタグとtest()
Reference
この問題について(JS|正規表現(3):グローバルフラグとtest()、exec()), 我々は、より多くの情報をここで見つけました https://velog.io/@fa0o00/JS-정규표현식3-전역-플래그와-test-execテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol