正規表現リテラル・[new] RegExp【コンストラクタ】
exec【検索】メソッド
test【検索評価】メソッド
toString【文字列変換】メソッド
正規表現リテラル・[new] RegExp【コンストラクタ】
メモ
- RegExp【正規表現】オブジェクトを生成
- new の有無は関係なくオブジェクト生成
- 通常、正規表現リテラルを直接指定 (RegExp【正規表現】オブジェクト 参照)
- lastIndex【次回検索の開始位置】プロパティは、0 に初期化
- 外部リンク (英語)
Regular Expression Literals ES2019 (10) ES2018 (9) ES2017 (8) ES2016 (7) ES2015 (6) ES5.1 The RegExp Constructor ES2019 (10) ES2018 (9) ES2017 (8) ES2016 (7) ES2015 (6) ES5.1 RegExp ( pattern, flags ) ES2019 (10) ES2018 (9) ES2017 (8) ES2016 (7) ES2015 (6) ES5.1
構文
/pattern/[flags]
[new] RegExp( "pattern" [, "flags"])
戻り値RegExp【正規表現】オブジェクト
pattern正規表現パターン
flags検索フラグの組み合わせ (詳細は下記参照)
例外SyntaxError 例外
有効な検索フラグ以外
複数の同じ検索フラグを指定
検索フラグ | 説明 | |
---|---|---|
g | global | グローバル検索 (前回の検索を引継ぎ) |
i | ignoreCase | 大文字・小文字の区別なし |
m | multiline | 複数行検索 |
s | dotAll | 改行文字対応 |
u | unicode | Unicode |
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【検索】
メモ
- 検索を実行し、詳細を返却
- lastIndex【次回検索の開始位置】プロパティ
- 'g'【グローバル検索】 または 'y'【検索開始位置固定】 フラグを指定した場合に使用 (下記、戻り値参照)
- その他詳細検索:
- 簡易検索:
- 通常の文字列検索:
- 外部リンク (英語)
RegExp.prototype.exec ( string ) ES2019 (10) ES2018 (9) ES2017 (8) ES2016 (7) ES2015 (6) ES5.1
構文
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.prototype.test ( S ) ES2019 (10) ES2018 (9) ES2017 (8) ES2016 (7) ES2015 (6) ES5.1
構文
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.prototype.toString ( ) ES2019 (10) ES2018 (9) ES2017 (8) ES2016 (7) ES2015 (6) ES5.1
構文
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