[JS]#10 RegExpオブジェクト
5012 ワード
正規表現
特定の文字の開発、置換、文字列の検証、開発者が制限された検査基準に合格したかどうかを検査するなど、正規表現を使用すると便利です.
正規表現(regular expression)は、パターンを使用して文字列の検索と置換を支援する特定のルールを持つ文字列の集合を表すフォーマット言語です.
RegExpオブジェクトは、モードを使用してテキストを認識するJSでサポートされているオブジェクトです.このオブジェクトは、文字記号と作成者を使用して作成できます.文字記号のパラメータは、二重斜線で囲まれ、引用符は使用されません. コンストラクション関数のパラメータには斜線はありませんが、引用符を使用します. lastIndex
LastIndexはRegExpオブジェクトの内部投影の1つで、一致する開始位置を設定します.デフォルト値は0としてマークされます.
きほんしようけいしき const obj = new RegExp("A", "g");
◇RegExpインスタンスを生成し、Aで試合対象と組み合わせる.2番目のパラメータ「g」は、グローバルフラグであり、すべてが一致することを示す. console.log(obj.test(value));
=objで設定したAをABCと照合し、Aが存在するか否かを検索するのでtrueを返す. const reg =/A/g;
正規表現文字を使用する形式ではnew演算子は使用されませんが、1番と同じです. gフラグ obj.test(value)
BはABABにあるので、組み合わせてtrueに戻ります. obj.lastIndex
=lastIndex値出力2.Bが一致するインデックスは1であり、2が出力される理由は1が一致するインデックスであり、lastIndexは次の一致を開始するインデックスを格納するため、+1は2に設定される. obj.test(value)
lastIndex値が2のため、ターゲット文字列(ABABA)の2番目のインデックスからBが一致します. obj.lastIndex
◇2番目のインデックスからBを3番目のインデックスと一致させるので、+1と4はlastIndexで設定して出力します. obj.test(value)
◇4番目のインデックスから、Bを組み合わせて、もう組み合わせないのでfalseが出力されます. obj.lastIndex
一致しない場合、lastIndex値は0です.(初期状態) gフラグを無効にする
LastIndexプロパティの値は、開発者が値を指定しても常にゼロインデックスから一致します. yフラグ
RegExpオブジェクトは、タグの設定に応じて異なる結果値を表示できます.
gタグはlastIndexを更新し、プロセス全体で文字列を検索および置換できます.タグがない場合は、毎回最初から一致します.
yタグもlastIndexを使用しますが、gタグとは異なります.gフラグがlastIndexからマッチングを開始すると、yフラグはlastIndex位置にマッチングする.
すなわち、gフラグがlastIndexの位置から終了するまで、1つの文字列が一致し、一致しない場合、lastIndexは0であり、一致する場合、その位置+1はlastIndexである.
yフラグはlastIndexの位置のみで一致し、一致が成功した場合はlastIndexで0を設定し、後のループではなく0を設定します. console.log("1-"+obj.test(value) + ": "+ obj.lastIndex)
=default lastIndexは0で、AABBAの最初のインデックスの値Aとobjをペアリングし、結果はtrueを返し、lastIndexは0+1、1である. console.log("2-"+obj.test(value) + ": "+ obj.lastIndex)
=lastIndexは現在1であり、AABBAの最初のインデックスにある文字はAであり、objと一致してtrueを返します.だからlastIndexは1+1になって2になる console.log("3-"+obj.test(value) + ": "+ obj.lastIndex)
lastIndexは2なので、文字列の2番目の位置からマッチングします.文字はBなので、マッチングの結果はfalseです.したがって、falseが返され、lastIndexは0になります. 文字列valueを表示すると、最後の文字はAです.ただし、中間のBに遭遇するとfalseとなり、lastIndexは0となるため、最後の文字に一致しません.連続文字モードを検証する場合は、yタグが便利です.
任意指定 lastIndex値
yタグを使用すると、propertyのsticky propertyがtrueになり、条件文のstickyがyタグとして確認された場合、lastIndexを任意に変更してマッチングを試みることができます. uフラグ、sフラグ
uマーク
uフラグは、正規表現のパターンをUnicodeのコード点に変換してマッチングする.また、内部構成ではUnicode構成がtrueに設定されている.uタグを使用しない場合は、コードポイントを変換するのではなく、文字を使用してマッチングします.
✔ES 2018サポート開始
従来の正規表現のポイント(ポイント)すべての文字の組み合わせですが、改行文字は組み合わせられていません.ただし、ES 2018でサポートされているSタグの使用が開始されると、改行文字にもマッチし、内部PropertyであるdotAll Propertyとしてtrueに設定される.改行
U+000A Line Feed(LF)("\n")
U+000D Carriage Return(CR)("\r")
U+2028 Line Separator
U+2029 Paragraph Separator
特定の文字の開発、置換、文字列の検証、開発者が制限された検査基準に合格したかどうかを検査するなど、正規表現を使用すると便利です.
正規表現(regular expression)は、パターンを使用して文字列の検索と置換を支援する特定のルールを持つ文字列の集合を表すフォーマット言語です.
RegExpオブジェクトは、モードを使用してテキストを認識するJSでサポートされているオブジェクトです.このオブジェクトは、文字記号と作成者を使用して作成できます.
/ab+c/i
new RegExp(/ab+c/, 'i'); // 리터럴
new RegExp('ab+c', 'i'); // 생성자
LastIndexはRegExpオブジェクトの内部投影の1つで、一致する開始位置を設定します.デフォルト値は0としてマークされます.
きほんしようけいしき
const value = "ABC";
const obj = new RegExp("A", "g");
console.log(obj.test(value));
const reg = /A/g;
console.log(reg.test(value));
// true
// true
◇RegExpインスタンスを生成し、Aで試合対象と組み合わせる.2番目のパラメータ「g」は、グローバルフラグであり、すべてが一致することを示す.
=objで設定したAをABCと照合し、Aが存在するか否かを検索するのでtrueを返す.
正規表現文字を使用する形式ではnew演算子は使用されませんが、1番と同じです.
const value = "ABABA", obj = /B/g;
console.log(obj.test(value) +": "+obj.lastIndex);
console.log(obj.test(value) +": "+obj.lastIndex);
console.log(obj.test(value) +": "+obj.lastIndex);
// true: 2
// true: 4
// false: 0
BはABABにあるので、組み合わせてtrueに戻ります.
=lastIndex値出力2.Bが一致するインデックスは1であり、2が出力される理由は1が一致するインデックスであり、lastIndexは次の一致を開始するインデックスを格納するため、+1は2に設定される.
lastIndex値が2のため、ターゲット文字列(ABABA)の2番目のインデックスからBが一致します.
◇2番目のインデックスからBを3番目のインデックスと一致させるので、+1と4はlastIndexで設定して出力します.
◇4番目のインデックスから、Bを組み合わせて、もう組み合わせないのでfalseが出力されます.
一致しない場合、lastIndex値は0です.(初期状態)
LastIndexプロパティの値は、開発者が値を指定しても常にゼロインデックスから一致します.
const value = "ABABA", obj = /B/;
console.log(obj.test(value) +": "+obj.lastIndex);
obj.lastIndex = 2;
console.log(obj.test(value) +": "+obj.lastIndex);
console.log(obj.test(value) +": "+obj.lastIndex);
// true: 0
// true: 2
// true: 2
RegExpオブジェクトは、タグの設定に応じて異なる結果値を表示できます.
gタグはlastIndexを更新し、プロセス全体で文字列を検索および置換できます.タグがない場合は、毎回最初から一致します.
yタグもlastIndexを使用しますが、gタグとは異なります.gフラグがlastIndexからマッチングを開始すると、yフラグはlastIndex位置にマッチングする.
すなわち、gフラグがlastIndexの位置から終了するまで、1つの文字列が一致し、一致しない場合、lastIndexは0であり、一致する場合、その位置+1はlastIndexである.
yフラグはlastIndexの位置のみで一致し、一致が成功した場合はlastIndexで0を設定し、後のループではなく0を設定します.
const value = "AABBA", obj = /A/y
console.log(obj.test(value) + ": "+ obj.lastIndex);
console.log(obj.test(value) + ": "+ obj.lastIndex);
console.log(obj.test(value) + ": "+ obj.lastIndex);
// true: 1
// true: 2
// false: 0
=default lastIndexは0で、AABBAの最初のインデックスの値Aとobjをペアリングし、結果はtrueを返し、lastIndexは0+1、1である.
=lastIndexは現在1であり、AABBAの最初のインデックスにある文字はAであり、objと一致してtrueを返します.だからlastIndexは1+1になって2になる
lastIndexは2なので、文字列の2番目の位置からマッチングします.文字はBなので、マッチングの結果はfalseです.したがって、falseが返され、lastIndexは0になります.
任意指定
yタグを使用すると、propertyのsticky propertyがtrueになり、条件文のstickyがyタグとして確認された場合、lastIndexを任意に変更してマッチングを試みることができます.
const value = "AABBA", obj = /A/y
if(obj.sticky)
obj.lastIndex = 4;
console.log(obj.test(value) + ": "+ obj.lastIndex);
// true: 5
uマーク
uフラグは、正規表現のパターンをUnicodeのコード点に変換してマッチングする.また、内部構成ではUnicode構成がtrueに設定されている.uタグを使用しない場合は、コードポイントを変換するのではなく、文字を使用してマッチングします.
const obj = new RegExp("\u{31}\u{32}", "u");
const obj2 = new RegExp(String.raw `\u{31}\u{32}`)
console.log(obj.test("12")); //true
console.log(obj.unicode); //true
console.log(obj2.test("12")); //false
console.log(obj2.unicode); //false
console.log(/\u{1f418}/u.test("🐘")); //true
console.log(/\u{1f418}/.test("🐘")); //false
ひょうしき✔ES 2018サポート開始
従来の正規表現のポイント(ポイント)すべての文字の組み合わせですが、改行文字は組み合わせられていません.ただし、ES 2018でサポートされているSタグの使用が開始されると、改行文字にもマッチし、内部PropertyであるdotAll Propertyとしてtrueに設定される.
U+000A Line Feed(LF)("\n")
U+000D Carriage Return(CR)("\r")
U+2028 Line Separator
U+2029 Paragraph Separator
const text = `line
줄을 바꿈`;
// before
console.log(/[\s\S]+/.test(text));
console.log(/[^]+/.test(text));
// true
// true
// s flag
const obj = new RegExp(".+", "s");
console.log(obj.test(text));
console.log(obj.dotAll);
// true
// true
Reference
この問題について([JS]#10 RegExpオブジェクト), 我々は、より多くの情報をここで見つけました https://velog.io/@simoniful/JS-10-RegExp-오브젝트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol