正規表現 JAVA Scriptのソースを表示
新しいページはコチラ
移動:
案内
,
検索
== '''概要''' == 以下に正規表現 JAVA Scriptのパターンマッチについて解説を記します。 matchメソッドなら、検索された文字が返却され、searchメソッドなら検索された文字があったポジション(先頭はゼロ)番号が返却されます。例では、matchメソッドを利用しています。他の言語でも具体的な使い方が異なることはありますが、正規表現の記述原理自体は共通していますので、参考になる場合もあります。具体的な利用については[[JavaScript 文字列操作#文字列正規表現検索(返却値が一致文字列) match|文字列検索 matchメソッド以降の記事]]を参照 ===検索=== ====/ ~ /(検索文字指定部分)==== ::/ ~ / のように"/"まれた部分に書いた文字が検索文字になります。例えば ::*ex1:'''"文字列正規表現検索Regular Expression".match(/Regular/)''' ::結果:Regular ※9番目の文字からのモノに一致。 ::とした場合、Regularという文字列を検索し、文字列の中盤の文字列配列番号9に一致し、Regularという文字列が検索結果として返却される。一致しなければnullが返却される。 ===="." ドット(何らかの文字一文字)==== ::"." ドットは何らかの文字一文字に対応 ::*ex2:'''"文字列正規表現検索Regular Expression".match(/.文字列/)''' ::結果:null ※文字列というキーワードなら存在するが、先頭にあるため、何らかの文字が無いので検索結果は不一致となる。つまり、「超文字列」という文章を対象に同じ検索をすると一致する。そして、検索の結果、なんらかの文字も"超"であり、超文字列だと判明する。 ::*ex3:'''"超文字列正規表現検索Regular Expression".match(/.文字列/)''' ::結果:超文字列 ※0番目の文字からのモノに一致。 ::*ex4:'''"文字列正規表現検索Regular Expression".match(/..表現/)''' ::結果:正規表現 ※3番目の文字からのモノに一致。 ::".." 2連続ドットなら、なんらかの文字2つに表現となる文字列を検索していることになる。 ===="*" アスタリスク(直前の文字ゼロ文字以上)==== ::"*" アスタリスクは直前の文字ゼロ文字以上に対応 ::*ex5:'''"超文字列正規表現検索Regular Expression".match(/超*/)''' ::結果:超 ※0番目の文字からのモノに一致。繰り返しの文字がなくても、あっても文字列というキーワードがあれば一致します。 ::*ex6:'''"超超超超超文字列正規表現検索Regular Expression".match(/超*/)''' ::結果:超超超超超 ※0番目の文字からのモノに一致し、繰り返している分だけ一致した文字が返却される。 ::*ex7:'''"文字列正規表現検索Regular Expression".match(/超*文字列/)''' ::結果:文字列 ※0番目の文字からのモノに一致し、超は使われていなくても良く、以降に書かれた文字列というキーワードにさえ一致すればよいということにも注意が必要です。 ===="+" プラス(直前の文字1文字以上)==== ::"+" プラスは直前の文字1文字以上に対応 ::*ex8:'''"文字列正規表現検索Regular Expression".match(/超+文字列/)''' ::結果:null ※一致する部分はなくなります。超は少なくとも1回以上使われていないと一致したことにならず、以降に書かれた文字列というキーワードがあっても、一致しないことになります。"*"とは意味が異なることに注意が必要です。 ::*ex9:'''"超超超超文字列正規表現検索Regular Expression".match(/超+文字列/)''' ::結果:超超超超文字列 ※0番目の文字からのモノに一致し、以降に書かれた文字列というキーワードがあれば、一致します。繰り返されていれば"*"と同じような一致が起こるということです。 ===="?" クェスチョンマーク、クェスションマーク(直前の文字0文字か1文字)==== ::"?" クェスチョンマークは直前の文字0文字か1文字に対応 ::*ex10:'''"超超超超文字列正規表現検索Regular Expression".match(/超?文字列/)''' ::結果:超文字列 ※3番目の文字からのモノに一致(4文字目)し、0番目から2番目の繰り返しは無視されます。超がなくても文字列というキーワードだけでも一致は起こります。次の例に示すような感じです。 ::*ex11:'''"文字列正規表現検索Regular Expression".match(/超?文字列/)''' ::結果:文字列 ※0番目の文字からのモノに一致し、超がなくても文字列というキーワードだけでも一致は起こります。 ===="[ ~ ]" 大カッコ、ブラケットマーク(羅列検索条件)==== ::"[~]" カッコに囲まれた文字のどれかを検索する ::例えば、a,b,c,d,e,f,g,h,i,jのいずれかの文字のどれかがあるか?という検索は ::*ex12:'''"文字列正規表現検索Regular Expression".match(/[abcdefghij]/)''' ::結果:e ※10番目の文字からのモノに一致し、一致する文字があったという結果になります。 ::ex12のようにa~jというアルファベットをすべて記述するのではなく[a-j]として省略して記述することができます。 ::*ex13:'''"文字列正規表現検索Regular Expression".match(/[a-j]/)''' ::結果:e ※10番目の文字からのモノに一致し、一致する文字があったという結果になります。 ::ex13の正規表現検索に対してさらに、大文字の全ても含めることにする場合 ::*ex14:'''"文字列正規表現検索Regular Expression".match(/[a-jA-Z]/)''' ::結果:R ※9番目の文字からのモノに一致し、一致する文字があったという結果になります。ex13では検索結果がeでしたが、その手前にあるRで一致するように変化しています。 ===="[^ ~ ]" 大カッコ、ブラケットマーク+ハットマーク(羅列検索条件否定)==== ::"[^ ~ ]" カッコに囲まれた文字以外 ::例えば、A~Zあるいは、文,字,列,正,規,表,現,検,索,のいずれかの文字以外はあるか?という検索は ::*ex15:'''"文字列正規表現検索Regular Expression".match(/[^A-Z文字列正規表現検索]/)''' ::結果:e ※10番目の文字からのモノに一致し、初めて登場する小文字として検索に合致します。全角文字全体を対象外にするという検索にする場合はもう少しひねる必要があります。文字コード範囲という指定方法や文字コードにおける最初の文字と終端の文字を使って"-"を使った範囲指定をするという手法です。文字コード種別ごとに異なる手法になるため、範囲指定方法は別の記事にまとめたいと思います。たとえば、Unicodeの全角文字全部のどれか?というのは ::*ex16:'''"文字列正規表現検索Regular Expression".match(/[々〇〻\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]/)''' ::結果:文 ※0番目の文字からのモノに一致し、文が最初に登場する全角文字ということになります。 ::上記手法だけは、一例として示しておきます。 ::[々〇〻\u3400-\u9FFF\uF900-\uFAFF]→々,〇,〻,\u3400-\u9FFF,\uF900-\uFAFF \uXXXXはユニコード文字番号16進数指定です。 ::[\uD840-\uD87F][\uDC00-\uDFFF]→ユニコードのサロゲートペアと呼ばれる範囲の4バイト文字範囲です。 ::説明の意味が分からない人はユニコードの記事で確認してみて下さい。 ===="|" パイポマーク(or検索条件)==== ::"|" パイポマークは、記述したうちのどれか?という意味になります。既に一つ前のややこしい議論の結果として使ってしまっています。前述のように文字コード範囲を複数記述する方法としても使えますし、検索文字列を複数記述する手法として"/ ~ /"の中で使えます。 ::ex17.'''"文字列正規表現検索Regular Expression".match(/Regular|Expression/)''' ::結果:Regular ※9番目の文字のモノです。RegularかExpressionのどちらかという意味になります。先に登場するRegularに一致します。 ===="{}" 中カッコ、ブレースマーク(直前の文字の繰り返し数指定)==== ::"{}" 中カッコ、ブレースマークは直前の文字の繰り返し数を指定できる検索になります。 ::ex18.'''"超超超超文字列正規表現検索Regular Expression".match(/超{4}文字列/)''' ::結果:超超超超文字列 ※0番目の文字からのモノに一致し、検索した文字列と一致したという結果になります。 ::繰り返し文字数を指定できるだけでなく、繰り返し範囲を指定することもできます。範囲指定するには例えば0回以上4回以下という範囲であれば{0,4}という具合にカンマの前に繰り返し範囲の中の小さいほうの数、下限の数、そして、カンマの後ろに繰り返し範囲の大きいほうの数上限の数を記述します。 ::ex19.'''"超超超超文字列正規表現検索Regular Expression".match(/超{0,4}文字列/)''' ::結果:超超超超文字列 ※0番目の文字からのモノに一致し、検索した文字列と一致したという結果になります。 ::0回の繰り返しでも一致するので、以下の例では超がなくても一致する結果が得られます。 ::ex20.'''"文字列正規表現検索Regular Expression".match(/超{0,4}文字列/)''' ::結果:文字列 ※0番目の文字からのモノに一致し、検索した文字列と一致したという結果になります。 <yjavascript> document.write("文字列正規表現超検索Regular Expression".match(/超{0,4}文字列/), "</BR>"); </yjavascript>
正規表現 JAVA Script
に戻る。
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ