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で処理する.例:
正規の欲張りを解除:
1)?普通の元の文字の後ろに置くと助数詞の元の文字で、0-1回現れます.
2)?助数詞の要素文字の後ろに置くと、正規表現を取り消す貪欲な捕獲となります.
例:
1、グループ捕獲
パケットが正則に存在する場合、キャプチャ時に、パケット内のコンテンツを取得することができる.
グループを使用する場合、マッチしたいだけで、捕獲したくない場合は、グループの一番前に追加する必要がありますか?すぐできます
例えば以下のコード:
2、正則におけるパケット参照
正則の一部は、他の部分と同じであり、パケット参照処理を使用する必要があります.
たとえば:
八、正規表現のStringオブジェクトをサポートする方法
1、replaceは正則表現と一致する部分列を置換する.新しい文字列を返します.
必須関数が二つあります.
1)文字列を指定するか、または置換する正規のオブジェクト
最初のパラメータが正則であれば、一回のreplace方法にマッチするごとに一回実行します.
2)文字列または置換テキストを生成する関数です.
二つ目のパラメータはfunctionで、関数をキャプチャするたびに一回実行します.実行するだけではなく、ブラウザがデフォルトでパラメータを伝えました.
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);