[公費教育]Day 42


「この授業では正規表現を勉強しました.」「昨日までAPIでいきなり正規表現を使っていたんですか?」という考えがありますが、私たちの目的は欲しい相手を見つけることです.
それは探していますか.
実は重要なのは探すことです.しかし、見つけたら、できることがたくさんあります.たとえば、Webサイトのパターンを分析して、目的の情報だけを出力し、私のWebサイトから別の設計にドラッグすることができます.(もちろん著作権は必須!)
あるいは、特定のラベルのみを抽出する機能を実現したり、条件文を用いずに複雑な文字列やあいまいな文字列を解析したりすることができます.このように,正規表現の使用はプログラミング言語に限られず,多様な応用が可能である.

📝目次

  • 正規表現
  • JavaScriptで使用
  • 1.正規表現とは?


    正規表現はJavaScript専用ではなく、すべての言語で通用する文法です.
    これはどの言語にも属さず、固有の文法であり、検索テクニックと言える.
    特徴は次のとおりです.
  • 特定のパターンを使用して特定の文字列内でターゲットを検索する構文
  • は、多くのアプリケーションと拡張ソリューションを備えた検索技術です.
  • パターンを使用して正確な検索を行います.
  • また、抽象検索も可能である.
  • テキストはどこでも分析できます.
  • [基本構造]

    / 정규표현식 /flags

    1.flags:正規表現を適用するときに使用する設定


  • g:検索に成功したが中断しないオプションで、すべてのテキストですべてのコンテンツを検索できます(全検索オプション)
    一般的な検索は左から右へ、オブジェクトを見つけて検索を終了します.

  • i:大文字と小文字を区別しないオプションの検索

  • s:.記号をすべての特殊文字(例えば、開文字)に一致するオプションに変更するには
    .デフォルトでは、記号は特殊文字n、tと一致しません.

  • m:nすべての段落を独立して分析するためのオプション
  • 2.主な文法


    (1).:開行文字と特殊文字以外のすべての単一文字を指す.
    t.e : t로 시작해서 아무거나 한 글자가 오고 e로 끝나는 패턴
    t..e : t로 시작해서 아무거나 두 글자가 오고 e로 끝나는 패턴
    このとき検索したい場合.必ずやります.
    (2) ^ $ ^...:段落の先頭で検索
    →この記号を使って文の始点の内容だけを検索します....$:段落の最後に検索
    →この記号を使って文の末尾の内容だけを検索します.^...$:文字そのものを表します.つまり、文の一番前で、一番後ろです.
    (3) []
  • カッコ内の1文字に一致して検索
  • このとき、内部に入ったものは一字一字見なければなりません.
  • 内部にある場合はnotとなります.
  • Gr[abcde∙]y = Gray, Grby, Grcy, Grdy, Grey, Gr∙y
    [^abcd] : a, b, c ,d 가 안들어가는 것 
    適用
    [a-z] : a~z까지
    [a-zA-Z0-9] : 모든 글자
    숫자 : \d == 0~9
    (4) ?

  • 検索記号の前の単一文字には、ない状態があってもよい.
    th?e : the or te

  • 数量字(+,*,{})の後に使うと最短の試合が可能です.
  • [数量者]

  • 数量字は、対象文字、単語の数に応じて検索されます.
  • デフォルト値はGreedyで、最大範囲内で一致を検索してみます.
  • 上記の場合、モードでの検索が困難であるため、?を用いて最短マッチングを実行する.
  • (5)+:シンボルの直前の1文字以上を検索
  • .+すべての文字が1つ以上検索された場合、文全体が検索されます.(/./と異なる)
  • greedyの場合は.+?を使用して最長値を返します.
  • /gskin+er/
    gskinner, gskinnner, gskinnnner 
    (6)*:符号の直前の1文字で0個以上検索した場合
    /go*gle/
    ggle, google, gogle
    (7){}:前の文字指定数を検索した場合の
    {2} : 2개
    {2,} : 2개 이상
    {2, 4} : 2개 이상 4개 이하
    
    전화번호 : ^01[\d]-*[\d]{4}-*[\d]{4}$
    ID : ^[a-z_][a-z0-9_]{5,9}$
    (8) ()
  • 正規表現の適用範囲をグループ化する構文
  • 最も重要な機能を使用して、パケットのターゲットを個別に選択できます.

  • 演算可能です.
    	/Gr(a | e)y/
    	( a | e ) : ae 이거나 ed 이거나.
    	Gray, Grey

  • 一つの単語に組み合わせることができます.
    	/go(og)+le/
    	googogle
    	googogogle
  • ここから、実際のプログラミングとは使い方が違います.JavaScriptでは、正規表現をオブジェクトとして検索すると、結果は主に配列で処理されます.したがって、これらの結果は配列に格納され、regexのメンバーフィールドとして格納される.

    (8-1)変数$&(メンバーフィールド)の取得


    変数名は$&で、検索に成功したすべてのデータが格納され、配列にはindex[0]が格納されます.
    このとき変数は制御不可能なonly-read変数である.

    (8-2)パケット取得変数$n


    検索に成功すると、パケットデータは単独で抽出され、変数にバインドされ、配列ではindex[1]から開始されます.
    これらの正規表現を適用する方法は、ターゲットHTMLのパターンを解析し、これらのパターンに基づいて正規表現を作成することです.この場合、まず要素のid値がどのように構成されているかを決定することが望ましい.
    では、実際のJavaScriptでどのように使われているのかを見てみましょう.

    2.JavaScriptでの使用


    JS、JAVAはいずれも正規表現が1つのオブジェクトとして存在し、複数のメソッドと変数が存在する.しかも静的で、いつでも使えます.

    [基本的な使い方]


    JavaScriptには2つの使い方があります.
    1)オブジェクトの作成と使用
  • 難しくもなく、あまり使われていません.
  • let regex = new RegeExp();
    2)クエリー文として使用
  • //を使用してクエリー文を作成すると、オブジェクトが自動的に生成されます.
  • // 검색 대상
    let str = "안녕하세요. 저는 Jack 입니다. 010-1116-2131 또는 010-1234-1234 로 연락주세요.";
    
    // 쿼리문
    let regex = /(01[\d]-?[\d]{3,4}-?[\d]{4}) 또는 (01[\d]-?[\d]{3,4}-?[\d]{4})/g;

    [正規表現に関数を適用]


    正規表現で使用される関数は2種類あります.
    1) .test
  • 正規表現とデータが一致する場合はtrueを返し、逆に
  • let = result = regex.test(str);
    console.log(result); // 데이터가 존재함으로 true를 반환.
    2) .exec
  • 通常の式に一致するデータが見つかった場合、詳細を含む配列で返されます.
  • 実際に適用される方法であり、上記の取得変数は戻り配列に含まれる.(インデックスによる呼び出し)
  • もちろん、アレイ内のメンバーフィールドにもインポートできます.(.n,.n, .n,.)
  • regex.exec(str);
    console.log(RegExp.$); // 전체 캡처변수 
    console.log(RegExp.$1 + " : " + RegExp.$2); // 첫 번째, 두 번째 그룹 캡처 변수

    [ g flags ]


    実際の使用では、gフラグがナビゲーション全体を可能にする原理は、gが検索中に制御点として機能することである.実際、.execを検索すると、無限反復文によって次の操作が実行されます.
    let regex = /alt="(.+?)".+?(\d.\d\d)</gs;
    
    while (true) {
    	let result = regex.exec(str); 
    	if (result == null) {
    		break;
    	} 
    	console.log(result[1]);
    	console.log(result[2]);
    }
    上記の場合、正規表現は1つのモードから2つのグループを抽出します.ただし、モード全体で10回存在すると仮定すると、出力値は合計20個でなければならない.
    すなわち,複文では,.execを1つのパターンで解析する.このときgマークを付けないと無限反復に陥ります.これは検索方法に関係し、正規表現は検索が完了すると、最初に検索を開始した場所に戻ります.
    そうであれば、正規表現は同じオブジェクトを検索し続け、配列に戻すので、if文のbreakは機能しません.したがって,gフラグを貼ると検索が完了すると,その位置で保存される.
    したがって、検索結果の後に新しい検索が行われ、結果はターゲット文の末尾まで検索され、結果がなければnullが返されます.実際には,上記の重複文を除いても正規表現は1つのパターンのグループだけを返す.