JavaScript <その他リファレンス メモ> 言語 等CSSHTMLJavaScriptPython ライブラリ・プラットフォームjQuerymicro:bitXamarin ドキュメンテーションDoxygenJSDocMarkdownSHFBXML ドキュメント コメント その他各種資料 子サイト簡易リファレンス・Tips サポート寄付 RegExp【正規表現】 正規表現リテラル・[new] RegExp【コンストラクタ】・exec【検索】・test【検索評価】・toString【文字列変換】 正規表現リテラル・[new] RegExp【コンストラクタ】exec【検索】test【検索評価】toString【文字列変換】 正規表現リテラル[new] RegExp【コンストラクタ】メモ概要RegExp【正規表現】オブジェクトを生成 new の有無は関係なくオブジェクト生成 通常、正規表現リテラルを直接指定 (RegExp【正規表現】オブジェクト 参照) lastIndex【次回検索の開始位置】プロパティは、0 に初期化 外部リンクECMA-262 (英語) Regular Expression LiteralsES2024 (15) ES2023 (14) ES2022 (13) The RegExp ConstructorES2024 (15) ES2023 (14) ES2022 (13) RegExp ( pattern, flags )ES2024 (15) ES2023 (14) ES2022 (13) 構文 /pattern/[flags] [new] RegExp( "pattern" [, "flags"]) RegExp【正規表現】オブジェクト pattern正規表現パターン flags検索フラグの組み合わせ (詳細は下記参照) 例外SyntaxError 例外 有効な検索フラグ以外 複数の同じ検索フラグを指定 検索フラグプロパティ説明dhasIndices キャプチャ部分の範囲インデックス取得gglobalグローバル検索 (前回の検索を引継ぎ)iignoreCase大文字・小文字の区別なしmmultiline複数行検索sdotAll 改行文字対応uunicode Unicode対応vunicodeSets Unicode対応 (拡張)ysticky 検索開始位置固定例 let regexp1 = /pattern/i; console.log(Object.prototype.toString.call(regexp1)); // 出力:[object RegExp] console.log(regexp1.test("ApatternZ")); // 出力:true console.log(regexp1.test("aPATTERNz")); // 出力:true console.log(regexp1.test("pat")); // 出力:false regexp1 = /pattern/ii; // SyntaxError 例外 regexp1 = /pattern/Z; // SyntaxError 例外 let regexp2 = RegExp("pattern", "i"); console.log(Object.prototype.toString.call(regexp2)); // 出力:[object RegExp] console.log(regexp2.test("ApatternZ")); // 出力:true console.log(regexp2.test("aPATTERNz")); // 出力:true console.log(regexp2.test("pat")); // 出力:false regexp2 = RegExp("pattern", "ii"); // SyntaxError 例外 regexp2 = RegExp("pattern", "Z"); // SyntaxError 例外 let regexp3 = new RegExp("pattern", "i"); console.log(Object.prototype.toString.call(regexp3)); // 出力:[object RegExp] console.log(regexp3.test("ApatternZ")); // 出力:true console.log(regexp3.test("aPATTERNz")); // 出力:true console.log(regexp3.test("pat")); // 出力:false regexp3 = new RegExp("pattern", "ii"); // SyntaxError 例外 regexp3 = new RegExp("pattern", "Z"); // SyntaxError 例外 RegExp.prototype.exec【検索】メモ概要検索を実行し、詳細を返却 lastIndex【次回検索の開始位置】プロパティ 'g'【グローバル検索】 または 'y'【検索開始位置固定】 フラグを指定した場合に使用 (下記、戻り値参照) その他詳細検索: String.match【正規表現検索 (詳細)】 簡易検索: test【検索評価】 String.search【正規表現検索 (簡易)】 通常の文字列検索: String.indexOf【順方向 文字列検索】 String.lastIndexOf【逆方向 文字列検索】 外部リンクECMA-262 (英語) RegExp.prototype.exec ( string )ES2024 (15) ES2023 (14) ES2022 (13) 構文 RegExp.exec( string ) 検索結果配列 (null:一致なし / 詳細は下記参照) 'g'【グローバル検索】または 'y'【検索開始位置固定】フラグ指定時は、下記プロパティを参照・更新 lastIndex【次回検索の開始位置】プロパティ:検索開始位置 (検索失敗:0 にリセット) string被検索文字列 (検索結果配列) プロパティ説明[0]マッチした文字列[1] ~ [n]キャプチャ文字列indexマッチ位置 (0~)indices キャプチャ部分の範囲インデックスの配列(d【キャプチャ部分の範囲インデックス取得】フラグ 指定)input入力の被検索文字列groups 名前付きキャプチャ文字列の配列length配列数例 let reg = /[a-z][0-9]/g; const str = "za1zb2zc3"; let result; while (result = reg.exec(str)) { console.log(reg.lastIndex, result, result.index, result.input); } // 出力:3 Array [ "a1" ] 1 za1zb2zc3 // 出力:6 Array [ "b2" ] 4 za1zb2zc3 // 出力:9 Array [ "c3" ] 7 za1zb2zc3 reg =/([a-z])([0-9])/g; while (result = reg.exec(str)) { console.log(reg.lastIndex, result, result.index, result.input); } // 出力:3 Array(3) [ "a1", "a", "1" ] 1 za1zb2zc3 // 出力:6 Array(3) [ "b2", "b", "2" ] 4 za1zb2zc3 // 出力:9 Array(3) [ "c3", "c", "3" ] 7 za1zb2zc3 // 名前付きキャプチャ const regex1 = /(?<w1>[a-z]+1) (?<w2>[a-z]+2) (?<w3>[a-z]+3)/; let result = regex1.exec("word1 word2 word3 word4"); console.log(result[0]); // 出力:word1 word2 word3 console.log(result[1]); // 出力:word1 console.log(result[2]); // 出力:word2 console.log(result[3]); // 出力:word3 console.log(result.index); // 出力:0 console.log(result.input); // 出力:word1 word2 word3 word4 console.log(result.groups.w1); // 出力:word1 console.log(result.groups.w2); // 出力:word2 console.log(result.groups.w3); // 出力:word3 console.log(result.length); // 出力:4 // 後方参照 (キャプチャ名) const regex2 = /(?<w1>[a-z]+1) (?<w2>[a-z]+2) \k<w2>/; result = regex2.exec("word1 word2 word1 word3"); console.log(result); // 出力:null result = regex2.exec("word1 word2 word2 word3"); console.log(result[0]); // 出力:word1 word2 word2 console.log(result[1]); // 出力:word1 console.log(result[2]); // 出力:word2 console.log(result.index); // 出力:0 console.log(result.input); // 出力:word1 word2 word2 word3 console.log(result.groups.w1); // 出力:word1 console.log(result.groups.w2); // 出力:word2 console.log(result.length); // 出力:3 // 後方参照 (キャプチャ番号) 上記と同等 const regex3 = /(?<w1>[a-z]+1) (?<w2>[a-z]+2) \2/; result = regex3.exec("word1 word2 word2 word3"); console.log(result[0]); // 出力:word1 word2 word2 console.log(result[1]); // 出力:word1 console.log(result[2]); // 出力:word2 console.log(result.index); // 出力:0 console.log(result.input); // 出力:word1 word2 word2 word3 console.log(result.groups.w1); // 出力:word1 console.log(result.groups.w2); // 出力:word2 console.log(result.length); // 出力:3 // 先読み・後読み const str = "word1 word2 word3 word2 word4"; // 肯定先読み:"word1 word2 word3 word2 word4" let result = /(word2) (?=word3)([a-z0-9]+)/.exec(str); console.log(result.index); // 出力:6 console.log(result[0]); // 出力:word2 word3 console.log(result[1]); // 出力:word2 console.log(result[2]); // 出力:word3 // 否定先読み:"word1 word2 word3 word2 word4" result = /(word2) (?!word3)([a-z0-9]+)/.exec(str); console.log(result.index); // 出力:18 console.log(result[0]); // 出力:word2 word4 console.log(result[1]); // 出力:word2 console.log(result[2]); // 出力:word4 // 肯定後読み:"word1 word2 word3 word2 word4" result = /([a-z0-9]+)(?<=word3) (word2)/.exec(str); console.log(result.index); // 出力:12 console.log(result[0]); // 出力:word3 word2 console.log(result[1]); // 出力:word3 console.log(result[2]); // 出力:word2 // 否定後読み:"word1 word2 word3 word2 word4" result = /([a-z0-9]+)(?<!word3) (word2)/.exec(str); console.log(result.index); // 出力:0 console.log(result[0]); // 出力:word1 word2 console.log(result[1]); // 出力:word1 console.log(result[2]); // 出力:word2 // d【キャプチャ部分の範囲インデックス取得】フラグ + 名前付きキャプチャ // 0123456789+123456789+123456789+123456789+123 const str = 'The quick brown fox jumps over the lazy dog.'; const regex = /(?<Fox>[a-z]+ fox)[a-z ]+ (?<Dog>[a-z]+ dog)/d; let result = regex.exec(str); console.log(result.length); // 出力:3 console.log(result[0]); // 出力:brown fox jumps over the lazy dog console.log(result[1]); // 出力:brown fox console.log(result[2]); // 出力:lazy dog // キャプチャ部分の範囲インデックス console.log(regex.hasIndices); // 出力:true console.log(result.indices.length); // 出力:3 console.log(result.indices[0]); // 出力:Array [ 10, 43 ] console.log(result.indices[1]); // 出力:Array [ 10, 19 ] console.log(result.indices[2]); // 出力:Array [ 35, 43 ] // 名前付きキャプチャ console.log(result.groups); // 出力:Object { Fox: "brown fox", Dog: "lazy dog" } console.log(result.groups.Fox); // 出力:brown fox console.log(result.groups.Dog); // 出力:lazy dog RegExp.prototype.test【検索評価】メモ概要簡易な検索 外部リンクECMA-262 (英語) RegExp.prototype.test ( S )ES2024 (15) ES2023 (14) ES2022 (13) 構文 RegExp.test( string ) 一致の有無 (true:有り / false:無し) string被検索文字列 例 let reg = /[a-z][0-9]/; const str = "za1zb2zc3"; console.log(reg.test(str)); // 出力:true reg = /[A-Z][0-9]/; console.log(reg.test(str)); // 出力:false RegExp.prototype.toString【文字列変換】メモ概要文字列 (正規表現リテラル)に変換 外部リンクECMA-262 (英語) RegExp.prototype.toString ( )ES2024 (15) ES2023 (14) ES2022 (13) 構文 RegExp.toString() 文字列 (正規表現リテラル) 例 let reg = /[a-z][0-9]/g; console.log(reg.toString()); // 出力:/[a-z][0-9]/g reg = new RegExp("[a-z][0-9]", "g"); console.log(reg.toString()); // 出力:/[a-z][0-9]/g