JavaScript 正規表現 新しいページはコチラ
提供: yonewiki
(→正規表現検索の一致確認 .test) |
(→正規表現検索の検索条件指定 RegExp.multiline(改行コード無視) , RegExp.$*) |
||
326行: | 326行: | ||
== '''正規表現検索の検索条件確認 .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''' == |