javascriptの正則

6326 ワード

一、jsの正則は文字列を処理するためのものです.
1、文字が規則に合っているかどうかを検証する---マッチング
2、文字列の中のルールに合った内容を取得する---」キャプチャ
二、jsで正則の作成方式を定義する:
1、字面量の作成//var reg=/\d/;
2、インスタンスの作成方式.//var reg=RegExp()
三、二種類の方式の違い:
1、インスタンスの作成に\dなどの追加が必要です.\
2、インスタンスの作成は文字列のスティッチングができます.変数を正規の規則文字列として扱うことができます.
四、正則構成:元文字と修饰符
メタ文字には、特殊要素文字、助数詞元文字、普通元文字があります.
1、特殊要素文字
 \d:0-9の間の数字を表します.  === [0-9]
 \w:数字、文字、下線のいずれかの文字==[a-zA-Z 0-9_]
 : 一つの改行
 \s:空白文字(スペースタブ)
 \b:境界を合わせる(文字とスペースの境界)
 ^: 元の文字で開始
 $: 元の文字で終了します.
 .: 以外の任意の文字
 \: 転義符
 |: または
():グループ化、または正則の中の一つの小正則
[x y z]:x、y、zのうちの一つ
[^xyz]:xyz以外のいずれか
[]包んだ文字は全て自分の意味を表していますので、特に意味はありません.例えば「.+」
2、助数詞の元文字
 *: ゼロから数回出現します
 +:一度に何度も
 ?:ゼロまたは一回
 {n}:出現n回
 {n、}:nから何回も
 {n,m}:nからmまで
3、普通文字
すべての文字は普通の元の文字として使用できます.普通の元の文字は自分の意味を表す文字です.
4、修饰符
i:ignoreCase大文字と小文字を無視する
g:グローバルマッチング
m:multiline整合改行
五、RegExp対象方法
1、exec
捕獲する.マッチング結果を保存する配列を返します.マッチが見つからない場合、戻り値はnullです.毎回一つのコンテンツしかキャプチャできません.複数のマッチが必要な場合は、g修飾子を追加する必要があります.そして、一致したコンテンツを循環的に獲得する.一度に全てのコンテンツを捕獲できるものがありますか?もちろん、文字列の中にはmatchがあります.butも自分の欠点があります.後に文字列のマッチング方法を紹介します.
例えば、戻ります. [2015]、index:2、input:「こんにちは、2016」
配列第一項:現在正則で捉えられている内容、第二項:indexはコンテンツに取り込まれたインデックス、第三性:inputはキャプチャされた元の文字列です.
正規の捕獲は二つの段階に分けられる.
1)まずマッチングし、マッチングに成功して捕獲し、マッチングに失敗してnullに戻ります.
2)根拠による捕獲
2、test
    マッチング.文字列で指定した値にマッチします.trueまたはfalseを返します.
 
六、正則の二つの特性は、怠け者でありながら貪欲である.
1、怠惰で、デフォルトで一回execを実行します.最初のルールに合ったものだけを捕獲して、第二及び以後は捕獲しません.
捕獲の怠惰性をキャンセルし、グローバル修飾子gで処理する.例:
    var reg = /\d+/g;  //   var reg = new RegExp("\\d+","g");

    var str = "    2015  2500   ,     60  80 。";

    var res = reg.exec(str);



    while(res){

        console.log(res);

        res = reg.exec(str);

    }
2、欲張りで、毎回一番長い規則で捕獲します.
正規の欲張りを解除:
1)?普通の元の文字の後ろに置くと助数詞の元の文字で、0-1回現れます.
2)?助数詞の要素文字の後ろに置くと、正規表現を取り消す貪欲な捕獲となります.
例:
    var str = "    2015  2500   ,     60  80 。";

    var reg = /\d+?/g;

    console.log(reg.exec(str));

    console.log(str.match(reg));
 七、正則のグループ化
1、グループ捕獲
パケットが正則に存在する場合、キャプチャ時に、パケット内のコンテンツを取得することができる.
グループを使用する場合、マッチしたいだけで、捕獲したくない場合は、グループの一番前に追加する必要がありますか?すぐできます
例えば以下のコード:
    var str = "    2015  2500   ,     60  80 。";

    var reg = /(?:\d+)([\u4e00-\u9fa5]+,?)/g;

    var ary = reg.exec(str);

    console.log(ary);

  //ary[0]  
  //ary[1]   ( ?: )
  //ary[2]   ( ?: )
  //...
  //ary[n]   n ( ?: n )
   グループキャプチャといえば、上述した文字列match方法は、全てのコンテンツを一度に捕獲することができますが、グループ内のコンテンツをキャプチャすることはできません.
    var reg = /(\d+)/g;

    var str = "    2015  2500   ,     60  80 。";

    console.log(str.match(reg));
 
2、正則におけるパケット参照
正則の一部は、他の部分と同じであり、パケット参照処理を使用する必要があります.
たとえば:
var reg = /^([a-z])([a-z])\2\1$/;

console.log(reg.test("woow"));



//  \1          ,                  

//  \2          ,                  
 
八、正規表現のStringオブジェクトをサポートする方法
1、replaceは正則表現と一致する部分列を置換する.新しい文字列を返します.
必須関数が二つあります.
1)文字列を指定するか、または置換する正規のオブジェクト
最初のパラメータが正則であれば、一回のreplace方法にマッチするごとに一回実行します.
2)文字列または置換テキストを生成する関数です.
二つ目のパラメータはfunctionで、関数をキャプチャするたびに一回実行します.実行するだけではなく、ブラウザがデフォルトでパラメータを伝えました.
    var str = "welcome to jin ji lie liu xue! good good study, day day up!";

    var reg = /(?:^| +)?([a-z]+)(?: +|$)?/g;

    str = str.replace(reg,function(){

        // console.dir(arguments);

        //                 ,         。

        //   :           arguments[0]     == exec ary[0]

        //   :           arguments[1]    == exec ary[1]

        //   :              arguments[2]    == exec index

        //   :         arguments[3]    ==     exec input



        // var tar = arguments[1];    //     ,          

        var tar = RegExp.$1;

        var f = tar.charAt(0).toUpperCase();

        tar = f + tar.substr(1);

        return " " + tar;

    });



    console.log(str);