正規表現 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(1).'''"文字列正規表現検索Regular Expression".match(/超{0,4}文字列/)''' ::結果:文字列 ※0番目の文字からのモノに一致し、検索した文字列と一致したという結果になります。 ::上限のない場合の0回以上の繰り返しでも一致するには以下のように"0,"とします。以下の例でも超がなくても一致する結果が得られます。 ::ex20(2).'''"文字列正規表現検索Regular Expression".match(/超{0,}文字列/)''' ::結果:文字列 ※0番目の文字からのモノに一致し、検索した文字列と一致したという結果になります。 ====/^ ~ /(先頭文字指定)==== ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、先頭での一致に限られます。"/ ~ /"の検索条件の最初の"/"の直後に"^"を付加して、"/^ ~ /"のようにする必要があります。"[^ ~ ]"のようなブラケット内での”^"はカッコ内に羅列した文字以外という否定でしたが、/^ /の内側の先頭の"^"では、検索対象文字列の先頭に検索文字があるかという意味になっていて混乱しがちですが、意味合いが違うことに気を付けましょう。 ::*ex22:'''"文字列正規表現検索\nRegular Expression文字列".match(/^Regular/)''' ::結果:null ※\nに続く行頭のRegularはありますが、先頭の検索なので、不一致です。行頭での一致を目指すのであれば一行ずつ変数に格納して処理する必要があります。あるいは\nを含めた検索条件を設定する方法もあります。 ::*ex23:'''"文字列正規表現検索\nRegular Expression文字列".match(/^文字列/)''' ::結果:文字列 ※0番目の文字でのモノに一致し、検索の一致があったという結果になります。 ====/ ~ $/(末尾文字指定)==== ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、末尾での一致に限られます。"/ ~ /"の検索条件の最後のの"/"の直前に"$"を付加して、"/ ~ $/"のようにする必要があります。 ::*ex24:'''"文字列正規表現検索\nRegular Expression文字列".match(/文字列$/)''' ::結果:文字列 ※28番目の文字でのモノに一致し、検索の一致があったという結果になります。一致の結果の意味が0番目にある文字列ではないことに注意が必要です。 ====/ ~\b/(スペース区切りアリ指定)==== ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、検索文字に続けて\bとついているような場合は文字列先頭あるいは末尾ありは半角スペースで区切られたキーワードであることが検索の条件に加わります。\bは区切りアリ。対して\Bはスペース区切り無しと大文字の場合は区切り条件を否定する意味になります。このような対応の検索オプションはいくつかありますが、基本的に大文字と小文字で相反する意味として対応づけられています。 ::*ex25:'''"文字列正規表現検索(RegularExpression) Regular Expression 文字列".match(/Expression\b/)''' ::結果:文字列 ※37番目の文字でのモノに一致し、検索の一致があったという結果になります。一致の結果の意味が17番目にあるExpressionではないことに注意が必要です。 ====/ ~\B/(スペース区切りナシ指定)==== ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、検索文字に続けて\Bとついているような場合は文字列先頭あるいは末尾にあって、かつ半角スペースでは区切られていないキーワードであることが検索の条件に加わります。 ::*ex26:'''"文字列正規表現検索(RegularExpression) Regular Expression 文字列".match(/Expression\B/)''' ::結果:文字列 ※17番目の文字でのモノに一致し、検索の一致があったという結果になります。一致の結果の意味が37番目にあるExpressionではないことに注意が必要です。 ====/\d/(ディジット、数字検索)==== ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、\dは[0-9]と同じことになります。 ::*ex27:'''"文字列正規表現検索Regular Expression2".match(/\d/)''' ::結果:2 ※27番目の文字でのモノに一致し、検索の一致があったという結果になります。 ====/\D/(ディジット、数字以外検索)==== ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、\Dは[^0-9]と同じことになります。 ::*ex28:'''"2016文字列正規表現検索Regular Expression2".match(/\D/)''' ::結果:文 ※4番目の文字でのモノに一致し、検索の一致があったという結果になります。初めて登場する数字以外の文字に一致しています。 ====/\w/(ワード、アルファベット/_/数字検索)==== ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、\wは[a-zA-Z_0-9]と同じことになります。 ::*ex27:'''"文字列正規表現検索Regular Expression2".match(/\d/)''' ::結果:R ※9番目の文字でのモノに一致し、検索の一致があったという結果になります。 ====/\W/(ワード、アルファベット/_/数字以外検索)==== ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、\Wは[^a-zA-Z_0-9]と同じことになります。 ::*ex28:'''"2016文字列正規表現検索Regular Expression2".match(/\D/)''' ::結果:文 ※4番目の文字でのモノに一致し、検索の一致があったという結果になります。初めて登場するアルファベット/_/数字以外の文字に一致しています。 <yjavascript> document.write("文字列正規表現検索\r\nRegular Expression".match(/^Regular/), "</BR>"); </yjavascript>
正規表現 JAVA Script
に戻る。
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ