SQA 2. 正規表現(テストとグローバル検索)
2886 ワード
⑨¥この問題は学習当時の一人が提起した問題で、学習グループと一緒に考えて解決する機会になりたいので、勉強してみました.(面白かったですハハ)
📌 Question
1.状況
「who」を含む文字列または含まない文字列を複数作成し、「who」を含む文字列のみを返すように要求しました.
文字列
「whois it」が一致しません
📌 私の答え
今日初めて見たのは正規儀式で、
この問題を解決するには、状況によって結果をどのように変えるかが私にとって重要です. 1.まずmdn/who/何を使うか.../who/gとは何かを学びました.
正規表現は、文字列に現れる特定の文字の組み合わせに対応するモードです.
様々なパターンと方法があり、様々なパターンが正規の文字/ab+c/で包まれています.
問題は、パターンが見えず、タグが存在することです.
(フラグは、通常の式で使用される設定値で、6種類あります.)
/g検索した値を文字列全体で検索します.
=>/who/はwhoという名前のものを検索するだけで、/who/gは文字列全体を専門に検索します.
2. test test()は、所与の文字列が正規表現を満たすか否かを判別し、ブール値とする. =>だから私が考えたのは、/gで文字列全体を検索すると、テストの値にマークがなく、テストの値と一致しないと、testが異なることはありません.
3.テストと/g testと/gの関係をグーグル化し、ありがたいことにmdnは解決策を得た. 🎈 正規表現にグローバルタグが設定されている場合、test()メソッドは正規表現のlastIndexを更新します.
test()を再度呼び出すと、testのパラメータ検索はlastIndexから続行されます.
test()がtrueを返すたびにlastIndex値が増加します.
例文のtgStrs arrayの要素を少し修正しました.
2番目の要素(「who is it」)は最初の意図通りに出力されなかったので、「who is it」に変更して再テストします.
正常出力!
testと/gとlastIndexの関係を理解した.
4.結論
最初のテストでwhoを見つけて、初期値のlastIndexを格納した場合、次のarray elementに移動してテストします!
この操作を繰り返すとlastIndexに基づいて値が検索されるため、2番目の「who is it」は前の要素lastIndex=3以降のwhoではないためfalse
falseの場合、lastIndex値は0に戻り、次の要素は正常にwhoを出力します.
このような構造で展開されています.
5.残念な点要素を直接修正してこそ、問題を曖昧に把握することができます.実戦では要因を変えることができない場合もあるので、何とかして問題を把握しなければならない.
△mdnもよく読んでください.
📌 Question
1.状況
「who」を含む文字列または含まない文字列を複数作成し、「who」を含む文字列のみを返すように要求しました.
/who/
と/who/g
の結果がどう違うのか分かりませんが、/who/
を使用して返される文字列は、passedStrs
変数です./who/g
を使用して返される文字列を比較し、passedStrs_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));
2.結果文字列
'who is it'
は正規表現/who/g
で検索されない.// 정규표현식 /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を使用した結果「whois 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"
*/
// tgStrs[1] = 'who is it'
regExp_g.test(tgStrs[1]) // false
tgStrs[1].match(regExp_g); // ["who"]
.match()でターゲットをマッチングします.test()結果は「who」...📌 私の答え
今日初めて見たのは
この問題を解決するには、状況によって結果をどのように変えるかが私にとって重要です.
正規表現は、文字列に現れる特定の文字の組み合わせに対応するモードです.
様々なパターンと方法があり、様々なパターンが正規の文字/ab+c/で包まれています.
問題は、パターンが見えず、タグが存在することです.
(フラグは、通常の式で使用される設定値で、6種類あります.)
/g検索した値を文字列全体で検索します.
2. test
3.テストと/g
test()を再度呼び出すと、testのパラメータ検索はlastIndexから続行されます.
test()がtrueを返すたびにlastIndex値が増加します.
例文のtgStrs arrayの要素を少し修正しました.
2番目の要素(「who is it」)は最初の意図通りに出力されなかったので、「who is it」に変更して再テストします.
正常出力!
testと/gとlastIndexの関係を理解した.
最初のテストでwhoを見つけて、初期値のlastIndexを格納した場合、次のarray elementに移動してテストします!
この操作を繰り返すとlastIndexに基づいて値が検索されるため、2番目の「who is it」は前の要素lastIndex=3以降のwhoではないためfalse
falseの場合、lastIndex値は0に戻り、次の要素は正常にwhoを出力します.
このような構造で展開されています.
△mdnもよく読んでください.
Reference
この問題について(SQA 2. 正規表現(テストとグローバル検索)), 我々は、より多くの情報をここで見つけました https://velog.io/@syeon02/SQA-2.-정규식-test와-전역검색テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol