JavaScript 正規表現 新しいページはコチラ
提供: yonewiki
(→正規表現検索の検索文字列参照 RegExp.input , RegExp.$_) |
(→正規表現検索の検索条件指定 RegExp.multiline(改行コード無視) , RegExp.$*) |
||
82行: | 82行: | ||
<HTML> | <HTML> | ||
<HEAD> | <HEAD> | ||
− | <TITLE>JavaScript RegExp | + | <TITLE>JavaScript RegExp input</TITLE> |
</HEAD> | </HEAD> | ||
<BODY> | <BODY> | ||
− | JavaScript RegExp | + | JavaScript RegExp input<br /> |
<SCRIPT Language="JavaScript"> | <SCRIPT Language="JavaScript"> | ||
<!-- | <!-- | ||
− | regexData1 = new RegExp("Regular Expression2")//正規表現文字列 /Regular Expression2/と同じ | + | regexData1 = new RegExp("Regular Expression")//正規表現文字列 /Regular Expression/と同じ |
+ | regexData2 = new RegExp("Regular Expression2")//正規表現文字列 /Regular Expression2/と同じ | ||
− | document.write("■RegExp | + | document.write("■RegExp input<br />"); |
− | + | regexData2.exec("正規表現文字列検索(Regular Expression2)"); | |
document.write("正規表現文字列検索input = ", RegExp.input, "<br />"); | document.write("正規表現文字列検索input = ", RegExp.input, "<br />"); | ||
− | regexData1. | + | regexData1.exec("$_正規表現文字列検索(RegularExpression)"); |
+ | document.write("正規表現文字列検索$_ = ", RegExp.$_, "<br />");//マッチしてないから入れ替わらない。 | ||
− | + | RegExp.input = "$_正規表現文字列検索(RegularExpression)" | |
+ | |||
+ | regexData1.exec(); | ||
document.write("正規表現文字列検索$_ = ", RegExp.$_, "<br />"); | document.write("正規表現文字列検索$_ = ", RegExp.$_, "<br />"); | ||
− | |||
--> | --> | ||
161行: | 164行: | ||
== '''正規表現文字列参照 .source''' == | == '''正規表現文字列参照 .source''' == | ||
+ | オブジェクト変数の初期化時にも設定できる正規表現文字列を参照できるメソッドです。 | ||
+ | *regexData.source | ||
+ | |||
+ | |||
+ | 引数は設定できません。 | ||
+ | |||
+ | |||
+ | サンプルプログラムは以下のとおりです。 | ||
+ | |||
+ | |||
+ | <syntaxhighlight lang="javascript" line start="1"> | ||
+ | <HTML> | ||
+ | <HEAD> | ||
+ | <TITLE>JavaScript RegExp compile</TITLE> | ||
+ | </HEAD> | ||
+ | <BODY> | ||
+ | JavaScript RegExp compile<br /> | ||
+ | <SCRIPT Language="JavaScript"> | ||
+ | <!-- | ||
+ | regexData1 = new RegExp("Regular Expression2")//正規表現文字列 /Regular Expression2/と同じ | ||
+ | |||
+ | document.write("■RegExp compile<br />"); | ||
+ | |||
+ | |||
+ | regexData1.exec("正規表現文字列検索(Regular Expression2)"); | ||
+ | document.write("正規表現文字列検索input = ", RegExp.input, "<br />"); | ||
+ | document.write("正規表現文字列検索source = ", regexData1.source, "<br />"); | ||
+ | |||
+ | regexData1.compile("Regular"); | ||
+ | |||
+ | regexData1.exec("$_正規表現文字列検索(RegularExpression)"); | ||
+ | document.write("正規表現文字列検索$_ = ", RegExp.$_, "<br />"); | ||
+ | document.write("正規表現文字列検索source = ", regexData1.source, "<br />"); | ||
+ | |||
+ | |||
+ | --> | ||
+ | </SCRIPT> | ||
+ | </BODY> | ||
+ | </HTML> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | [[Media:JavaScript RegExp 04 source.html|サンプル実行結果]] | ||
+ | |||
== '''正規表現検索実行 .exec''' == | == '''正規表現検索実行 .exec''' == | ||
+ | このメソッドはこれまでのサンプルですでに使っていました。RegExp.inputやRegExp.$_といった検索対象文字列を設定する静的プロパティを利用していた場合に、このexecメソッドに引数無しで呼び出したときには、初期化時や.compileに与えられた正規表現にしたがって正規表現検索処理が実行されます。またRegExp.inputやRegExp.$_に設定された文字列を検索対象にしない場合には引数に検索対象文字列を設定することで、所望の検索が実行されます。 | ||
+ | |||
+ | |||
+ | メソッドの利用方法は以下のようにします。 | ||
+ | |||
+ | |||
+ | *strRegExp.exec() | ||
+ | |||
+ | |||
+ | 上記のように引数なし、あるいは | ||
+ | |||
+ | |||
+ | *strRegExp.exec("正規表現文字列検索 Regular Expression") | ||
+ | *strRegExp.exec(strData) | ||
+ | |||
+ | |||
+ | と上記のように引数を設定することもできます。 | ||
+ | |||
+ | |||
+ | :*第一引数:検索対象文字列 | ||
+ | |||
+ | |||
+ | プログラムサンプルは以下のとおりです。 | ||
+ | <syntaxhighlight lang="javascript" line start="1"> | ||
+ | <HTML> | ||
+ | <HEAD> | ||
+ | <TITLE>JavaScript RegExp exec</TITLE> | ||
+ | </HEAD> | ||
+ | <BODY> | ||
+ | JavaScript RegExp exec<br /> | ||
+ | <SCRIPT Language="JavaScript"> | ||
+ | <!-- | ||
+ | regexData1 = new RegExp("Regular Expression2") //正規表現文字列 /Regular Expression2/と同じ | ||
+ | |||
+ | document.write("■RegExp exec<br />"); | ||
+ | |||
+ | RegExp.input = "正規表現文字列検索(Regular Expression2)"; | ||
+ | regexData1.exec(); | ||
+ | document.write("正規表現文字列検索input = ", RegExp.input, "<br />"); | ||
+ | document.write("正規表現文字列検索source = ", regexData1.source, "<br />"); | ||
+ | |||
+ | regexData1.compile("Regular"); | ||
+ | |||
+ | regexData1.exec("$_正規表現文字列検索(RegularExpression)"); | ||
+ | document.write("正規表現文字列検索$_ = ", RegExp.$_, "<br />"); | ||
+ | document.write("正規表現文字列検索source = ", regexData1.source, "<br />"); | ||
+ | |||
+ | |||
+ | --> | ||
+ | </SCRIPT> | ||
+ | </BODY> | ||
+ | </HTML> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | [[Media:JavaScript RegExp 05 exec.html|サンプル実行結果]] | ||
+ | |||
== '''正規表現検索の一致確認 .test''' == | == '''正規表現検索の一致確認 .test''' == | ||
+ | このメソッドはexecによく似ていますが、その名のとおり試すことを目的としています。まずは、一致するものがあるのかないのかという判断だけするという目的です。RegExp.inputやRegExp.$_といった検索対象文字列を設定する静的プロパティを利用していた場合に、このtestメソッドに引数無しで呼び出したときには、初期化時や.compileに与えられた正規表現にしたがって正規表現検索処理が実行されます。またRegExp.inputやRegExp.$_に設定された文字列を検索対象にしない場合には引数に検索対象文字列を設定することで、所望の検索のテストが実施されます。 | ||
+ | |||
+ | |||
+ | メソッドの利用方法は以下のようにします。 | ||
+ | |||
+ | |||
+ | *bRegexResult = strRegExp.test() | ||
+ | |||
+ | |||
+ | 上記のように引数なし、あるいは | ||
+ | |||
+ | |||
+ | *bRegexResult = strRegExp.test("正規表現文字列検索 Regular Expression") | ||
+ | *bRegexResult = strRegExp.test(strData) | ||
+ | |||
+ | |||
+ | と上記のように引数を設定することもできます。 | ||
+ | |||
+ | |||
+ | :*第一引数:検索対象文字列 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | プログラムサンプルは以下のとおりです。 | ||
+ | <syntaxhighlight lang="javascript" line start="1"> | ||
+ | <HTML> | ||
+ | <HEAD> | ||
+ | <TITLE>JavaScript RegExp exec</TITLE> | ||
+ | </HEAD> | ||
+ | <BODY> | ||
+ | JavaScript RegExp exec<br /> | ||
+ | <SCRIPT Language="JavaScript"> | ||
+ | <!-- | ||
+ | regexData1 = new RegExp("Regular Expression2") //正規表現文字列 /Regular Expression2/と同じ | ||
+ | |||
+ | document.write("■RegExp exec<br />"); | ||
+ | |||
+ | RegExp.input = "正規表現文字列検索(Regular Expression2)"; | ||
+ | document.write("検索試験test = ", regexData1.test(), "<br />"); | ||
+ | document.write("検索実行exec = ", regexData1.exec(), "<br />"); | ||
+ | document.write("正規表現文字列検索input = ", RegExp.input, "<br />"); | ||
+ | document.write("正規表現文字列検索source = ", regexData1.source, "<br />"); | ||
+ | |||
+ | regexData1.compile("Regular"); | ||
+ | |||
+ | document.write("検索試験test = ", regexData1.test("$_正規表現文字列検索(RegularExpression)"), "<br />"); | ||
+ | document.write("検索実行exec = ", regexData1.exec("$_正規表現文字列検索(RegularExpression)"), "<br />"); | ||
+ | document.write("正規表現文字列検索$_ = ", RegExp.$_, "<br />"); | ||
+ | document.write("正規表現文字列検索source = ", regexData1.source, "<br />"); | ||
+ | |||
+ | |||
+ | --> | ||
+ | </SCRIPT> | ||
+ | </BODY> | ||
+ | </HTML> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | [[Media:JavaScript RegExp 06 test.html|サンプル実行結果]] | ||
+ | |||
== '''正規表現検索の検索条件確認 .global(グローバルマッチング)''' == | == '''正規表現検索の検索条件確認 .global(グローバルマッチング)''' == | ||
+ | RegExgオブジェクトを引き継いだ変数が検索オプションのglobalマッチングを有効にしている状態であるかを確認するメソッドです。 | ||
+ | |||
+ | |||
+ | 以下のようにして利用します。 | ||
+ | |||
+ | |||
+ | *bRegexGlobal = strRegExp.global | ||
+ | |||
+ | |||
+ | プログラムサンプルは以下のとおりです。 | ||
+ | <syntaxhighlight lang="javascript" line start="1"> | ||
+ | <HTML> | ||
+ | <HEAD> | ||
+ | <TITLE>JavaScript RegExp global</TITLE> | ||
+ | </HEAD> | ||
+ | <BODY> | ||
+ | JavaScript RegExp global<br /> | ||
+ | <SCRIPT Language="JavaScript"> | ||
+ | <!-- | ||
+ | regexData1 = new RegExp("Regular Expression2","g"); //正規表現文字列 /Regular Expression2/gと同じ | ||
+ | regexData2 = /Regular Expression/g; //正規表現文字列 /Regular Expression/gと同じ | ||
+ | |||
+ | document.write("■RegExp global<br />"); | ||
+ | |||
+ | document.write("正規表現文字列検索オプション regexData1.global = ", regexData1, "<br />"); | ||
+ | document.write("正規表現文字列検索オプション regexData2.global = ", regexData2, "<br />"); | ||
+ | |||
+ | |||
+ | --> | ||
+ | </SCRIPT> | ||
+ | </BODY> | ||
+ | </HTML> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | [[Media:JavaScript RegExp 07 global.html|サンプル実行結果]] | ||
+ | |||
== '''正規表現検索の検索条件確認 .ignoreCase(大文字小文字区別無視)''' == | == '''正規表現検索の検索条件確認 .ignoreCase(大文字小文字区別無視)''' == | ||
− | == '''正規表現検索の検索条件指定 .multiline(改行コード無視) , $*''' == | + | RegExgオブジェクトを引き継いだ変数が検索オプションのignoreCaseマッチングを有効にしている状態であるかを確認するメソッドです。 |
+ | |||
+ | |||
+ | 以下のようにして利用します。 | ||
+ | |||
+ | |||
+ | *bRegexIgnoreCase = strRegExp.ignoreCase | ||
+ | |||
+ | プログラムサンプルは以下のとおりです。 | ||
+ | <syntaxhighlight lang="javascript" line start="1"> | ||
+ | <HTML> | ||
+ | <HEAD> | ||
+ | <TITLE>JavaScript RegExp ignoreCase</TITLE> | ||
+ | </HEAD> | ||
+ | <BODY> | ||
+ | JavaScript RegExp ignoreCase<br /> | ||
+ | <SCRIPT Language="JavaScript"> | ||
+ | <!-- | ||
+ | regexData1 = new RegExp("Regular Expression2","i"); //正規表現文字列 /Regular Expression2/gと同じ | ||
+ | regexData2 = /Regular Expression/i; //正規表現文字列 /Regular Expression/gと同じ | ||
+ | |||
+ | document.write("■RegExp ignoreCase<br />"); | ||
+ | |||
+ | document.write("正規表現文字列検索オプション regexData1.ignoreCase = ", regexData1.ignoreCase, "<br />"); | ||
+ | document.write("正規表現文字列検索オプション regexData2.ignoreCase = ", regexData2.ignoreCase, "<br />"); | ||
+ | |||
+ | |||
+ | --> | ||
+ | </SCRIPT> | ||
+ | </BODY> | ||
+ | </HTML> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | [[Media:JavaScript RegExp 08 ignoreCase.html|サンプル実行結果]] | ||
+ | |||
+ | == '''正規表現検索の検索条件指定 RegExp.multiline(改行コード無視) , RegExp.$*''' == | ||
+ | 検索対象の文字列の中の改行コードを無視する形式で正規表現検索をかけるか?かけないか?を指定する静的なRegExpオブジェクトのプロパティ値です。このプロパティ値がtrueなら改行コードを含めて検索し、falseなら改行コードを無視することになります。 | ||
+ | |||
+ | |||
+ | 以下のようにして利用します。 | ||
+ | |||
+ | |||
+ | *RegExp.multiline = false | ||
+ | |||
+ | |||
+ | あるいは | ||
+ | |||
+ | |||
+ | *RegExp.$* = false | ||
+ | |||
+ | |||
+ | として利用します。 | ||
+ | |||
+ | |||
+ | プログラムサンプルは以下のとおりです。 | ||
+ | <syntaxhighlight lang="javascript" line start="1"> | ||
+ | <HTML> | ||
+ | <HEAD> | ||
+ | <TITLE>JavaScript RegExp multiline</TITLE> | ||
+ | </HEAD> | ||
+ | <BODY> | ||
+ | JavaScript RegExp multiline<br /> | ||
+ | <SCRIPT Language="JavaScript"> | ||
+ | <!-- | ||
+ | regexData1 = new RegExp("Regular\nExpression"); //正規表現文字列 /Regular Expression2/gと同じ | ||
+ | regexData2 = /Regular Expression/i; //正規表現文字列 /Regular Expression/gと同じ | ||
+ | |||
+ | document.write("■RegExp multiline<br />"); | ||
+ | |||
+ | RegExp.input = "Regular\nExpression2"; | ||
+ | |||
+ | RegExp.multiline = true; | ||
+ | document.write("正規表現文字列検索 RegExp.multiline(true) = ", regexData1.exec(), "<br />"); | ||
+ | |||
+ | RegExp.multiline = false; | ||
+ | document.write("正規表現文字列検索 RegExp.multiline(false) = ", regexData1.exec(), "<br />"); | ||
+ | |||
+ | --> | ||
+ | </SCRIPT> | ||
+ | </BODY> | ||
+ | </HTML> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | と説明したとおりになるかなって思ったんですけど、ならないね。もうちょっと研究してみます。orz何が原因なんだろ...鬱 | ||
+ | |||
+ | [[Media:JavaScript RegExp 09 multiline.html|サンプル実行結果]] | ||
+ | |||
+ | |||
+ | で、いろいろやってみたんですけど、RegExp.inputによる検索対象文字列設定とRegExpオブジェクト変数を使ってのxx.exec()の引数無しによるRegExp.inputを検索する方法ではmultilineのオプションが動作しないみたいで、検索一致すらしません。RegExp.inputの文字列中では改行による行頭という概念が存在していないのかもしれません。謎です。謎。謎?んなわけないっす。自分がわかっていないだけです。わかっている人はいるのかもしれません。わたくしめにはこれ以上は調べられませんので、真相究明にはかなり時間がかかると思います。一方通行な記事ですので、誰からも助言を得ることさえありません。おそらく…。この先、わたくしめにそのことを教えてくれる、そんな親切な人はあらわれないでしょう。 | ||
+ | |||
+ | |||
+ | 更に実験したサンプルは以下になります。 | ||
+ | |||
+ | |||
+ | <syntaxhighlight lang="javascript" line start="1"> | ||
+ | <HTML> | ||
+ | <HEAD> | ||
+ | <TITLE>JavaScript RegExp multiline</TITLE> | ||
+ | </HEAD> | ||
+ | <BODY> | ||
+ | JavaScript RegExp multiline<br /> | ||
+ | <SCRIPT Language="JavaScript"> | ||
+ | <!-- | ||
+ | regexData1 = new RegExp("^Expression","m"); //正規表現文字列 /Regular Expression2/gと同じ | ||
+ | regexData2 = /^Expression/m; //正規表現文字列 /Regular Expression/gと同じ | ||
+ | |||
+ | document.write("■RegExp multiline<br />"); | ||
+ | |||
+ | RegExp.input = "Regular\n\nExpression2\n\n"; | ||
+ | var ss = "Regular\n\nExpression2\n\n"; | ||
+ | |||
+ | alert(RegExp.$_); | ||
+ | alert(ss); | ||
+ | |||
+ | RegExp.multiline = true; | ||
+ | document.write("正規表現文字列検索 RegExp.multiline(true) = ", RegExp.multiline,",", regexData1.exec(), "<br />"); | ||
+ | |||
+ | RegExp.multiline = false; | ||
+ | document.write("正規表現文字列検索 RegExp.multiline(false) = ", regexData1.exec(), "<br />"); | ||
+ | document.write("正規表現文字列検索 RegExp.multiline(true) = ", ss.replace(regexData2, "expression"), "<br />"); | ||
+ | document.write("正規表現文字列検索 RegExp.multiline(true) = ", regexData2.exec(ss), "<br />"); | ||
+ | |||
+ | alert(ss.replace(regexData2, "expression")); | ||
+ | --> | ||
+ | </SCRIPT> | ||
+ | </BODY> | ||
+ | </HTML> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | [[Media:JavaScript RegExp 09 multiline2nd.html|サンプル実行結果]] | ||
+ | |||
== '''正規表現検索開始位置の設定 .lastIndex''' == | == '''正規表現検索開始位置の設定 .lastIndex''' == | ||
== '''パターンマッチング文字列参照 .$1~.$9 , $1~$9''' == | == '''パターンマッチング文字列参照 .$1~.$9 , $1~$9''' == |