JavaScript学習小結(7)のJS RegExp

25834 ワード

jsでは、正規表現はRegExpオブジェクトで表され、RegExpは正規表現の略語である.RegExpのシンプルなパターンは、単独の文字であっても良いです.より複雑なモードは、より多くの文字を含み、解析、書式チェック、置換などに利用できます.RegExp()構造関数を使用してRegExpオブジェクトを作成することもできますし、直接量文法を使用することもできます.
1、RegExp概要
RegExpとは、正規表現(Reglar Expression)であり、コードの中でregex、regexpまたはRE/re/regと略されています.つまり、単一の文字列を使って、ある構文ルールに適合した一連の文字列検索モードを記述し、検索モードをテキスト検索とテキストの置換に使用します.
正規表現は文字列で構成された検索モードです.テキストでデータを検索する場合、検索モードで検索内容を記述できます.つまり、正規表現は文字モードを記述するオブジェクトで、文字列パターンのマッチングや検索に置き換えて使用できます.文字列にモードマッチングを行うための強力なツールです.
正規表現とは、直接に規則やモード表現として理解できるということは、あるコンピュータで理解できるルールを表していますが、一般の人が読みにくい文字表現は、すべてのテキスト検索とテキスト置換の操作に使えます.簡単に文字列を処理するということです.
2、文字列の方法.
(1)、charAt()は、ある文字を取得し、文字列のあるビットの文字を返します.
(2)、スプリット()は文字列を分割し、配列を取得します.
(3)、search()ある文字が最初に出現した位置を検索し、正則を配合して使用するとより良くなり、戻り値は数値であり、戻り値は-1が見つからなかった.
(4)、match()文字列で指定された文字を検索して、その文字を返します.正則を使用しないと、最初に現れた指定文字だけを返します.後にはマッチしません.正則を使用してグローバルマッチングを行うと、指定された文字列のすべてを配列形式で返します.見つからない場合はnullに戻ります.
(5)、replace()は文字を置換して、新しい文字列を返します.正則を配合して使うとより良くて、すべてのマッチを置き換えることができます.

 
 var str='abcdefgca';
 //            。
 alert(str.charAt());  //  :d
 //            。
 alert(str.search('z'));  //  :-
 //       。
 //         c,      。
 alert(str.match('c'));  //  :c
 // 'a'   'i'。
 //          a,      。
 alert(str.replace('a', 'i'));  //  :ibcdefgca
 //     。
 var str='--aaa--cd';
 var arr=str.split('-');  //  :,,aaa,,cd
 alert(arr);
 
例:普通の方法で文字列のすべての数字を探し出す
構想を実現する:文字列の中の数字を探し出すのは難しくないです.判断を使って文字列の中の数字を抽出してから、文字列の中では必ず1つの数字だけではないので、抽出した数字文字を空の文字列で保存してから、それらの数字文字を配列に追加して、最後に戻ってきます.プログラムはどのように実現されているかを見に来ました.

 
 var str=' abc d aa c zz -=-=s-';
 var arr=[];
 var num='';
 //         
 for(var i=;i<str.length;i++){
   //                 ,    
   if(str.charAt(i)>='' && str.charAt(i)<=''){
     //                 
    num += str.charAt(i);
   }
   else{
     //        。
     if(num){
       //        。
       arr.push(num);
       //      ,      。
       num='';
     }
   }
 }
 //                    ,      。
 if(num){
   //            。
   arr.push(num);
   //      。
   num='';
 }
 //  :OK,        。
 alert(arr); //  :,,,,,,,
 
普通の方法で完成できますが、構造ははっきりしていますが、コードは比較的長いです.正則を使うと、一つの表現がこんなに多くの作業を完了しています.とても便利です.以下は正則の使い方を見てみます.
3、正則を使う
正規表現の文法:var re=new RegExp('モード'、'修繕符')
モードは式のモードであり、修飾子は大域一致を指定し、大文字と小文字を区別しないなど、完全な形態は正規表現である.
正則の文法長を見たら、JSの典型的な新規作成対象の文法ではないですか?私達はすべて知っていて、できるだけnewキーワードを使うことを免れて、newを使って間違いなく新しく1つの対象を創建して、それでは同時に一定のメモリの空間を占有したことを暗示して、もし処理が適当でないならば、多く蓄積してメモリがあふれ出ることをもたらして、このようにかなり資源を消費して、コードの最適化の実現に役立ちません.また、このような書き方は正則の強大さを表していません.彼は簡潔で潔白なのが正しいと思います.だから実際に使う時はこのJSスタイルの正則文法を採用しないで、他のスタイルを使っています.
文法:var re=/モード/修飾子
このスタイルは比較的簡潔で、一般の人にはわからない表現です.
(1)、修飾子.
修繕子は大域一致と大文字と小文字の区別を行うために使用されます.
大文字と小文字を無視します.i(ignoreの略字、中国語の翻訳は無視します.)
グローバルマッチング:g(globalの略記、中国語翻訳:全体的な/グローバル的な)
例:グローバル検索指定文字

 
 var str='AbCdEFgiX';
 //JS  :
 //             ,   abc  。
 var reg=new RegExp('abc', 'i');
 alert(str.match(reg));  //  :AbC
 //    :
 var re=/efg/i;
 alert(str.match(re));  //  :EFg
 
4、四角い括弧と元の文字.
(1)、四角い括弧.
四角括弧は、ある範囲の文字を検索するために使用されます.①、任意の文字式:[abc]四角括弧内の任意の文字を検索します.ここではどちらでもいいという意味です.


 var str='apc xpc ppc bpc spc opc';
 //[apx]pc,        , :apc ppc xpc
 var re=/[apx]pc/g;
 alert(str.match(re));  //    pc。
 
 ②、範囲検索.
式:[0-9][a-z][A-z][A-Z]
[0-9]任意の0-9の数字を検索します.
[a-z]任意のa-zの文字を検索します.
[A-z]任意の大文字A-小文字zの文字を検索します.
[A-Z]任意の大文字A-大文字Zの文字を検索します.
③検索を除外する.
式:[^abc][^a-z][^0-9]
[^abc]四角括弧内の任意の文字を検索します.
[^a-z]文字以外の任意の文字を検索します.数字記号の中国語以外の文字を含みます.
[^0-9]任意の数字以外の文字を検索して、アルファベットの中国語の外文を含みます.

 
 var str='ot out o.t o t o`t ot ot';
 //o t      ,     
 var re=/o[^-]t/g;
 alert(str.match(re));  //  :out,o.t,o t,o`t
 
④、検索を選択します.
式:(a 124 b 124 c)
指定されたオプションを検索します.aまたはbまたはc.
⑤、マッチングは、例えば、[a-z 0-9 A-Z][^a-z 0-9]のような組合せパターンを使用することもできる.
[a-z 0-9 A-Z]任意の大きさの文字と数字を書く.
文字と数字以外は何でもいいです.
(2)、元文字.
元の文字は特殊な意味を持つ文字であり、変換文字とも呼ばれます.
以下はよく使われるメタ文字です.
メタ文字
説明
使用
...
任意の文字を表して、行の区切りと行の終点を含まない単一の文字を検索します.
使用を勧めないと問題が起きやすいです.
\w
単語の文字を検索します.英語の数字を含む下線は、[a-z 0-9]に相当します.
//w/
\W
単語以外の文字を検索すると、[^a-z 0-9]に相当します.
//W/
\d
数字を検索すると、[0-9]に相当します.
//d/
\D
非数値検索は[^0-9]に相当します.
//D/
\s
空白文字を検索します.スペース記号、エコー、タブ、改行、および改ページ記号を含み、印刷できない文字を表示してはいけません.
//s/
\S
空白以外の文字を検索します.
//S/
\b
単語の先頭または最後にあるマッチを検索します.一致しない場合はnullに戻ります.
//b/
\B
単語境界以外のマッチを検索すると、つまり先頭または最後に位置しないと、マッチ位置の前の文字と次の文字のタイプは同じです.つまり、同じ単語でなければならないか、または非単語でなければならないか、文字列の先頭と最後の部分は非単語文字と見なされます.
//B/
行の区切りを検索します.見つかったら、その位置に戻ります.見つからなかったら-1を返します.
// 
\f
変換子を検索します
//f/ 
\r
リターンを検索します
//r/ 
\t
タブを検索します
5、助数詞
助数詞とは、数量詞、つまり個数で、正則に用いて、出現の回数を表します.
以下はよく使われる助数詞です.
助数詞
説明
使用

0回または任意の回は{0,}に相当します.
使用を勧めません.範囲が広くて、正確さが足りません.
?
0回か1回は{0,1}に相当します.
/10gは、後に続く0個または1個の'0'を含むグローバル検索を行う.

一回または任意の回は{1,}に相当します.
//w+/gは少なくとも一つの単語をグローバル検索します.
{n}
ちょうどn回
//d{4}/gは、4桁の数字を含むグローバル検索を行います.
{n,}
少なくともn回、上限は限らない.
//d{3、}/gは、少なくとも三桁の数字を含むグローバル検索を行う.
{n,m}
少なくともn回、最大m回
 /d{3,4}/gは、3ビットまたは4ビットを含む数字をグローバル検索する.
以下はよく使われるマッチングモードです.
モード
説明
使用
^a
任意の先頭がaの文字で、行頭を表します.
//^\d/数字で始まる /^a/g グローバル検索'a'で始まる文字
a$
任意の末尾がaの文字で、行末を表します.
//d$/数字で終わる /z$/gグローバル検索は'z'で終わる文字です.
?a.
Aに続く任意の文字
//a(?=b)/gグローバル検索'a'に続く'b'の文字
?a.
Aの後に付いている文字はありません.
//c(?=d)/gグローバル検索'c'後に'd'に続く文字がない
6、文字列と正則の組み合わせ.
 (1)、search()配合正則
例:文字列の中で最初に数字が現れる場所を探します.

 
 var str='asdf  zxcvbnm';
 //   \d,       
 var re=/\d/;
 alert(str.search(re));  //  :            
 
 (2)、match()配合正則
実は何も正則でなければいけないものはないです.正則はものを作るのがもっと便利です.以下はこの章の残した歴史問題を完成して、どのように正則を使って、一つのコードで普通の方法を完成することができます.
実例の前に、まずmatch()と正則の配合を見ます.


 var str='asdf  zxcvm';
 //                \d
 var re=/\d/;
 //           ,           
 alert(str.match(re));  //  :
 //        ,     g
 var re=/\d/g;
 //         ,             
 alert(str.match(re));  //  :,,,,,,,,,,,,
 //           ,           
 var re=/\d\d/g;
 //         ,           ,    ,       
 alert(str.match(re));  //  :,,,,
 //        +,+    ,        。
 var re=/\d+/g;
 //      。
 alert(str.match(re));  //  :,,,,
 
 例:正規表現を使って文字列のすべての数字を検索します.

 
 var str=' abc d aa c zz -=-=s-';
 //alert(str.match(/\d+/g));
 //   \d     [-]  ,       。
 alert(str.match(/[-]+/g));  //  :,,,,,,,
 
正則は強力な文字列マッチングツールです.このように簡単にコードを使って完成します.
(3)、replace()配合正則

 
 var str='abc zaaz deaxcaa';
 //      a     
 alert(str.replace('a', ));  //       a   
 //          a   
 var re=/a/g;
 alert(str.replace(re, ''));  //     a  
 
 例:簡単な敏感語フィルタリング
敏感語というのは法律で許されない言葉で、すべての不法語は敏感語と呼ばれてもいいです.これは国家の安全を害し、憲法の確立の基本原則に反対し、デマを散歩し、民心を乱し、社会秩序を乱し、社会の安定を破壊します.卑猥またはその他の道徳上の反感を買う言葉、及び法律上の規定または禁止されているその他の内容を含む言葉.普段よく使われている言葉でも、大多数の人が使う言葉です.道徳上の反感を買う言葉です.この文は喧嘩の時に他人を攻撃する言葉です.ここでは、人気のあるネット用語をいくつか挙げてみます.

 
 
 
   
   JavaScript  
 
 window.onload=function (){
   var oBtn=document.getElementById('btn');
   var oTxt=document.getElementById('txt');
   var oTxt=document.getElementById('txt');
   oBtn.onclick=function (){
     //   |            
     var re=/  |   |   |  |  |   /g;
     //                  
     oTxt.value=oTxt.value.replace(re,'***');
   };
 };