javascript正規表現定義(文法)まとめ
3039 ワード
本論文はjavascript正規表現の定義(文法)を述べている.皆さんに参考にしてあげます.具体的には以下の通りです.
正規表現の2つの定義方法:一つは直接RegExp()を呼び出すこと、二つ目は直接字面量で定義すること、すなわちvar re=/正規規則/.
2つの定義方法の本質は、RegExp()を呼び出す方法です.
同じセグメントの正規コードを呼び出した時、ECMAScript 3とECMAScript 5では表現が全く違います.
ECMAScript 3では、同じRegExpオブジェクトを呼び出し、ECMAScript 5では、異なるRegExpオブジェクトを呼び出します.EXCMAScript 5で実行するたびに、新しいRegExpオブジェクトが生成されます.
ECMAScript 3ではプログラムの危険性があります.一つの場所でこのオブジェクトを修正すれば、すべての呼び出し場所が変わります.
1.直接量文字
正則では普通、直接に文字にマッチします.
//javascript/直接文字にマッチするjavascript
アルファベット以外の文字マッチングもサポートされています.
\o NUL文字(\u 0000)
\t タブ(\u 0009)
改行(\\u 000 A)
\v 垂直タブ(\u 000 B)
\f 改ページ符(\\u 000 C)
\r 回車符(\\u 000 D)
\xnn 16進数nnで指定されたラテン文字、例えば\x 0 Aは
\uxxxxは16進数xxxで指定されたユニックキャラで、例えば\u 0009は\tに相当します.
\cX コントロール文字^X、たとえば、\cJは改行符に相当します.
正規表現には、特殊な意味の句読点があります.
^$*+?=!:|\/()[]{}
2.文字クラス
[…] 大かっこ内の任意の文字
[^…] 四角い括弧内にない任意の文字
... 任意の文字
\w 任意のASCII文字からなる単語は、[a-zA-Z 0-9]に相当します.
\W 任意のASCII文字で構成された単語は、[^a-zA-Z 0-9]に相当します.
\s 任意のUnicode空白文字
\S Unicode以外の空白文字でも、\wと\Sは違いますのでご注意ください.
\d 任意のASCII値は、[0-9]に等しい.
\D ASCII数字以外の任意の文字は、[^0-9]に相当します.
[\b] チェックアウト直接量(特例)
3.繰り返し(回数)
? 0または1回
+ 1回以上
* 任意回数
{n} n回
{m,n} 最低m回、最大n回
{n,} n回以上
正則はデフォルトでは強欲マッチです.
如[a+b+] aabbにマッチするなら、abやabなどとはマッチングしません.aabbだけにマッチします.
[a+?b+?] これはaaabに合います なぜこの違いが生まれたのですか?
答え:+正則を非強欲にマッチングさせるということです.bここでは一つのbしかマッチしません.なぜaは3つのbにマッチしますか?正規表現のパターンマッチングは、常に文字列の最初のマッチ可能な位置を探しているからです.
4.オプショングループの参照
𞓜 選択可能な文字を分離するために使用され、例えば[ab 124]cd]は、abにもcdにもマッチすることができ、注意:選択項目の試行マッチング順序は左→右であるため、aマッチングが通過するとabにもマッチしなくなり、abがより良いマッチングであってもよい.
() 1.個別の項目をサブ表現として扱う /java(script)?/ javascriptとjavaにマッチできます. 丸括弧の部分が子を形成する表現で、サブ表現に対して|*?などの操作
2.完全なモードでサブモードを定義する 後ろにあるのは、前の丸括弧からの式を参照してください. /(''')[a-z]\1/ \1参照は、最初の丸括弧内の表式ですので、'''''を参照してください.
3.後方参照先のサブ表現 注意:/「'」[a-z]/「この正則」の意味は 単引用符または二重引用符に小文字を加えて単引用符または二重引用符を付けます.前後のシングル引用符が一致していない場合は、このように書くことができます.
\数字を入れる 前の丸括弧の表現を参照できます.
5.マッチング位置(アンカーポイント)を設定する
^ 文字列の先頭にマッチし、複数行の検索で、1行の先頭にマッチします.
$ 文字列の最後にマッチし、複数行の検索で、行の最後に一致します.
\b 単語の境界を合わせます.つまり、文字\wと\Wの間に位置する位置、または文字列\wと文字列の先頭または末尾の間に位置する位置です.
\B 単語以外の境界にマッチする位置
(?=p) 零幅は先に断言しています.次の文字は全部pにマッチするが、pにマッチする文字は含まれていません.
(?!p) 零幅負は先に断言して、次の文字はpと一致しないことを要求します.
6.修飾子
正規表現の文字数/右側の
i 大文字と小文字の区別のないマッチを実行します.
g グローバルマッチングを実行します.つまり、最初のマッチを見つけたら停止するのではなく、すべてのマッチが見つかります.
m 複数行マッチングモード、^は行の先頭と文字列の先頭にマッチします. /javaドル/m マッチ可能 javafunc
注意:正規表現が大域の場合、exec()とtest()のたびに現在設定されているlastIndexを現在の位置に設定し、再実行するとlastIndexの位置から実行されますので、毎回実行する場合はlastIndexは0に設定されます.
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます.
正規表現の2つの定義方法:一つは直接RegExp()を呼び出すこと、二つ目は直接字面量で定義すること、すなわちvar re=/正規規則/.
2つの定義方法の本質は、RegExp()を呼び出す方法です.
同じセグメントの正規コードを呼び出した時、ECMAScript 3とECMAScript 5では表現が全く違います.
function reg(){
var re = /\sjavascript/;
return re;
}
ECMAScript 3とECMAScript 5でそれぞれreg()の方法を何回も呼び出します.ECMAScript 3では、同じRegExpオブジェクトを呼び出し、ECMAScript 5では、異なるRegExpオブジェクトを呼び出します.EXCMAScript 5で実行するたびに、新しいRegExpオブジェクトが生成されます.
ECMAScript 3ではプログラムの危険性があります.一つの場所でこのオブジェクトを修正すれば、すべての呼び出し場所が変わります.
1.直接量文字
正則では普通、直接に文字にマッチします.
//javascript/直接文字にマッチするjavascript
アルファベット以外の文字マッチングもサポートされています.
\o NUL文字(\u 0000)
\t タブ(\u 0009)
改行(\\u 000 A)
\v 垂直タブ(\u 000 B)
\f 改ページ符(\\u 000 C)
\r 回車符(\\u 000 D)
\xnn 16進数nnで指定されたラテン文字、例えば\x 0 Aは
\uxxxxは16進数xxxで指定されたユニックキャラで、例えば\u 0009は\tに相当します.
\cX コントロール文字^X、たとえば、\cJは改行符に相当します.
正規表現には、特殊な意味の句読点があります.
^$*+?=!:|\/()[]{}
2.文字クラス
[…] 大かっこ内の任意の文字
[^…] 四角い括弧内にない任意の文字
... 任意の文字
\w 任意のASCII文字からなる単語は、[a-zA-Z 0-9]に相当します.
\W 任意のASCII文字で構成された単語は、[^a-zA-Z 0-9]に相当します.
\s 任意のUnicode空白文字
\S Unicode以外の空白文字でも、\wと\Sは違いますのでご注意ください.
\d 任意のASCII値は、[0-9]に等しい.
\D ASCII数字以外の任意の文字は、[^0-9]に相当します.
[\b] チェックアウト直接量(特例)
3.繰り返し(回数)
? 0または1回
+ 1回以上
* 任意回数
{n} n回
{m,n} 最低m回、最大n回
{n,} n回以上
正則はデフォルトでは強欲マッチです.
如[a+b+] aabbにマッチするなら、abやabなどとはマッチングしません.aabbだけにマッチします.
[a+?b+?] これはaaabに合います なぜこの違いが生まれたのですか?
答え:+正則を非強欲にマッチングさせるということです.bここでは一つのbしかマッチしません.なぜaは3つのbにマッチしますか?正規表現のパターンマッチングは、常に文字列の最初のマッチ可能な位置を探しているからです.
4.オプショングループの参照
𞓜 選択可能な文字を分離するために使用され、例えば[ab 124]cd]は、abにもcdにもマッチすることができ、注意:選択項目の試行マッチング順序は左→右であるため、aマッチングが通過するとabにもマッチしなくなり、abがより良いマッチングであってもよい.
() 1.個別の項目をサブ表現として扱う /java(script)?/ javascriptとjavaにマッチできます. 丸括弧の部分が子を形成する表現で、サブ表現に対して|*?などの操作
2.完全なモードでサブモードを定義する 後ろにあるのは、前の丸括弧からの式を参照してください. /(''')[a-z]\1/ \1参照は、最初の丸括弧内の表式ですので、'''''を参照してください.
3.後方参照先のサブ表現 注意:/「'」[a-z]/「この正則」の意味は 単引用符または二重引用符に小文字を加えて単引用符または二重引用符を付けます.前後のシングル引用符が一致していない場合は、このように書くことができます.
\数字を入れる 前の丸括弧の表現を参照できます.
5.マッチング位置(アンカーポイント)を設定する
^ 文字列の先頭にマッチし、複数行の検索で、1行の先頭にマッチします.
$ 文字列の最後にマッチし、複数行の検索で、行の最後に一致します.
\b 単語の境界を合わせます.つまり、文字\wと\Wの間に位置する位置、または文字列\wと文字列の先頭または末尾の間に位置する位置です.
\B 単語以外の境界にマッチする位置
(?=p) 零幅は先に断言しています.次の文字は全部pにマッチするが、pにマッチする文字は含まれていません.
(?!p) 零幅負は先に断言して、次の文字はpと一致しないことを要求します.
6.修飾子
正規表現の文字数/右側の
i 大文字と小文字の区別のないマッチを実行します.
g グローバルマッチングを実行します.つまり、最初のマッチを見つけたら停止するのではなく、すべてのマッチが見つかります.
m 複数行マッチングモード、^は行の先頭と文字列の先頭にマッチします. /javaドル/m マッチ可能 javafunc
注意:正規表現が大域の場合、exec()とtest()のたびに現在設定されているlastIndexを現在の位置に設定し、再実行するとlastIndexの位置から実行されますので、毎回実行する場合はlastIndexは0に設定されます.
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます.