正規表現リテラル・[new] RegExp【コンストラクタ】
exec【検索】メソッド
test【検索評価】メソッド
toString【文字列変換】メソッド

正規表現リテラル・[new] RegExp【コンストラクタ】

メモ

構文

/pattern/[flags]
[new] RegExp( "pattern" [, "flags"])

戻り値RegExp【正規表現】オブジェクト
pattern正規表現パターン
flags検索フラグの組み合わせ (詳細は下記参照)
例外SyntaxError 例外
有効な検索フラグ以外
複数の同じ検索フラグを指定
検索フラグ説明
gglobalグローバル検索 (前回の検索を引継ぎ)
iignoreCase大文字・小文字の区別なし
mmultiline複数行検索
s dotAll改行文字対応
u unicodeUnicode
y sticky検索開始位置固定

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【検索】

メモ

構文

RegExp.exec( string )

戻り値検索結果配列 (null:一致なし / 詳細は下記参照)
'g'【グローバル検索】または 'y'【検索開始位置固定】フラグ指定時は、下記プロパティを参照・更新
lastIndex【次回検索の開始位置】プロパティ:検索開始位置 (検索失敗:0 にリセット)
string被検索文字列
プロパティ説明
[0]マッチした文字列
[1] ~ [n]キャプチャ文字列
indexマッチ位置 (0~)
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

RegExp.prototype.test【検索評価】

メモ

構文

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【文字列変換】

メモ

構文

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