「Javascript権威ガイド」正規表現

5288 ワード

直接量はペアのスラッシュに直接含まれる文字列と定義します.
var pattern=/s/;
立体関数RegExp()で対価を定義する正規表現
var pattern=new RegExp("s$")
 
直接量の文字
文字
マッチ
文字と数字
自分自身
\o
NR文字
\t
タブ
行の区切り
\v
垂直タブ
\f
改ページ符
\r
回車符
 
 
 
 
 
 
 
文字クラス
直接量の文字を単独で大かっこに入れると、文字類になります.1つの文字クラスは、その中に含まれる任意の文字にマッチします.
文字
マッチ
[]
大かっこ内の任意の文字
[^]
四角い括弧内にない任意の文字
...
改行と他のユニック行の終端符を除く任意の文字
\w
[a-zA-Z 0-9]
\W
[^a-zA-Z 0-9]
\s
任意のUnicode空白文字
\S
Unicode以外の空白文字
\d
[0-9]
\D
[^0-9]
[\b]
チェックアウト直接量 
 
 
 
 
 
 
 
 
 
 
繰り返し
文字
意味
{n,m}
前の項目に少なくともn回マッチしますが、m回を超えてはいけません.
{n,}
前のエントリにn回以上マッチします.
{n}
前のエントリにマッチするn回
?
前の項目に0回または1回を合わせて、{0,1}に相当します.

前の項目に1回または複数のマッチをすると、{1,}

前の項目に0回以上マッチすると、{0,}
 
 
 
 
 
 
 
欲張らない繰り返し
できるだけ少なくマッチします.
{n,m}  ??   +?   *?
 
選択、グループ化、参照
選択      |
グループ化     ()   個々の項目を合成するサブ表現   
       完全なモードでサブモードを定義し、正規表現が目標文字列と一致した場合、対象列から括弧のサブモードと一致する部分を抽出することができます.
                同じ正規表現の後ろに前のサブ表現を引用することができます.\1は最初の丸括弧のサブ表現で、位置は計算に参加する左括弧の位置です.
 
正規表現の前のサブ表現の参照とは、そのパターンにマッチするテキストの参照です.
//(''')[^''*\1/ 
正規表現では、二重引用符で囲まれた内容に引用符があることは許されません.逆も同じです.このような参照は文字クラスでは使用できません.
文字
意味
𞓜
マッチする文字は左か右かのサブ表現を選択します.
()
いくつかの項目を一つのユニットに組み合わせて、*?この組み合わせにマッチする文字列を覚えて、その後の参照に使うことができます.
(?:)
ユニットにアイテムを組み合わせるだけで、該当する文字は記憶されません.
n番目のグループに最初にマッチした文字と一致します.グループは丸括弧のサブ表現(おそらくネストされている)で、グループインデックスは左から右の左括弧(?:形式のグループは番号付けされていません.
 
 
 
 
 
マッチする場所を指定します
文字
意味
^
文字列の先頭にマッチし、複数行の検索で、1行の先頭にマッチします.
$
文字列の最後にマッチし、複数行の検索で、行の最後に一致します.
\b
単語の境界、すなわち文字\wと\Wの位置にマッチします.または文字列\wと文字列の先頭または末尾の間に位置しています.(\\b)は、タブです.
\B
単語以外の境界にマッチする位置
(?=p)
零幅は先に断言しています.次の文字は全部pにマッチするが、pにマッチする文字は含まれていません.
(?!p)
零幅負は先に断言して、次の文字はpと一致しないことを要求します.
 
 
 
 
 
 
//Jj ava([Ss]cript)?(?=]/「Javascript:The Definitive Gide」の「JavaScript」にマッチすることができますが、「Java in a Nutshell」のJavaにはマッチしません.後ろに引用符がありません.
/Java(?!Script)([A-Z]\w*)/Javaにマッチしてから大文字と任意のASCII単語に従うことができますが、Javaの後ろにはScriptについていけません.JavaBensにマッチしますが、Javaneseにはマッチしません.JavaScriptにマッチしますが、JavaScripptにはマッチしません.
 
修飾子
文字
意味
i
大文字と小文字の区別のないマッチを実行します.
g
グローバルマッチを実行します.最初のマッチを見つけたら停止しないでください.
m
複数行マッチングモード、^は行の先頭と文字列の先頭にマッチします.
 
 
 
 
修饰子は/の外に置いて、任意の组み合わせができます.大きさを区别しないで文字列に合う単语「java」を使って、/\bjava\b/iを使って、すべての単语にマッチして、/\bjava\b/igを使います.
 
マッチングモード用のStringメソッド
search()
引数は正規表現で、最初のマッチするサブストリングの開始位置を返します.見つからない場合は-1を返します.
search()のパラメータが正規表現でない場合は、まずRegExpコンストラクタによって正規表現に変換されます.search()は大域検索に対応しておらず、正規表現パラメータのgは無視されます.
 
replace()
検索と置換を行います.最初のパラメータは正規表現で、2番目のパラメータは置換された文字列です.
正規表現で修飾子gが設定されている場合、ソース文字列はモードにマッチするすべてのサブストリングを第2のパラメータで指定された文字列に置換します.そうでなければ、第1のサブストリングだけを置換します.
最初のパラメータが正規表現ではなく文字列である場合は、この文字列を直接検索します.
文字列の中に$プラスの数字が追加された場合、replace()は指定されたサブ表現にマッチするテキストでこの2つの文字を置換します.
 
match()
マッチした結果からなる行列を返します.正規表現では修飾子gが設定されています.この方法で返した配列は文字列内のすべてのマッチ結果を含んでいます.
「1 plus 2 equals 3」.match(/\d+/g) //は、[1],[2],[3]を返します.
修飾子gがない場合は、最初のマッチのみを検索しますが、依然として配列を返します.配列の最初の要素はマッチした文字列です.残りの要素は正則式です.括弧で囲まれたサブ表現です.
var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
var text = "visit my blog at http://www.example.com/~hehe";
var result = text.match(url);
if(result != null) {
    var fullurl = result[0];   //http://www.example.com/~hehe
    var protocol = result[1];  //http
    var host = result[2];      //www.example.com
    var path = result[3];      //~hehe
}
 
スプリット()
呼び出した文字列をサブストリングからなる配列に分割します.使用する区切り記号はスプリット()のパラメータです.
「1,2,3,4,5」.スプリット(/\s*、\s*);   //は、[1],[2],[3],[4],[5]を返します.
 
RegExpオブジェクト
RegExpの構造関数には、2つの文字列パラメータがあります.2番目のパラメータは選択できます.最初のパラメータには、正規表現の本体、すなわち/間のテキストが含まれます.2番目のパラメータには修飾子が指定されます.
正規表現を動的に作成するには、RegExp()構造関数が必要です.
RegExpプロパティ
source:読み取り専用、正規表現を含むテキスト
global:読み取り専用のブール値は、修繕子gがあるかどうかを説明します.
ignoreCase:読み取り専用のブール値は、修繕符iを持っているかどうかを説明します.
multiiline:読み取り専用のブール値は、修繕符を持っているかどうかを説明します.
lastIndex:読み書き可能な整数、もしマッチングモードにg修飾子があるなら、ここの属性は文字列全体に次の検索の開始位置に格納されます.
 
RegExp方法
exec()
指定された文字列に対して正規表現を実行します.マッチが見つからない場合はnullを返します.マッチを見つけたら、行列を返します.
この配列の最初の要素は正規表現と一致する文字列であり、残りの要素は括弧内のサブ表現と一致するサブストリングである.
属性indexはマッチングが発生した文字位置を含み、属性inputは検索中の文字列を参照します.
 
test()
ある文字列を検出します.正規表現の一致結果が含まれている場合、trueを返します.
var pattern=/java/i
pattern.test(「JavaScript」); //true
 
グローバル正規表現がメソッドtest()を呼び出すと、その動作はexec()と同じです.lastIndexで指定された位置からある文字列を検索し始めます.マッチング結果が見つかったら、すぐにlastIndexが現在のサブストリングの終了位置に設定されます.test()を使って文字列を巡回することができます.exec()方法と同じです.