メタ文字とは
- メタ文字とは正規表現において特別な意味を持つ文字のことで、メタキャラクタとも呼ばれることがあります。
- 規則を理解してしまえば、記憶するべき情報はそれほど多くありません。
- メタ文字そのものを検索したい場合は、検索する値を「\」でエスケースする必要があります。
console.log('?!?!?!'.match(/\?/g));
実行結果
[ '?', '?', '?' ]
単一の文字の検索 "."
- 何らかの単一文字を検索するにはピリオド(.)を使います。
- 連続でピリオドを記述した場合、「記述した数分連続した文字」が検索対象となります。
// 1つ記述
console.log('ABC'.match(/./));
console.log('ABC'.match(/./g));
// 連続して記述
console.log('ABC'.match(/../));
console.log('ABC'.match(/../g));
console.log('ABCD'.match(/../));
console.log('ABCD'.match(/../g));
// 組み合わせて記述
console.log('ABCD'.match(/A./));
console.log('ABCD'.match(/.D/));
// 何も該当しない場合
console.log('ABC'.match(/..../));
// 全角文字や記号も対象となる
console.log('あ1!?*/-'.match(/./g));
実行結果
[ 'A', index: 0, input: 'ABC', groups: undefined ]
[ 'A', 'B', 'C' ]
[ 'AB', index: 0, input: 'ABC', groups: undefined ]
[ 'AB' ]
[ 'AB', index: 0, input: 'ABCD', groups: undefined ]
[ 'AB', 'CD' ]
[ 'AB', index: 0, input: 'ABCD', groups: undefined ]
[ 'CD', index: 2, input: 'ABCD', groups: undefined ]
null
[
'あ', '1', '!',
'?', '*', '/',
'-'
]
文字や数字を検索 "\w"
- 何らかの文字や数字を検索するには「\w」を使います
- 半角のa~z
- 半角のA~Z
- 半角の0~9
- 半角のアンダースコア(_)
// 1つ記述
console.log('Aa1'.match(/\w/));
console.log('Aa1'.match(/\w/g));
// 連続して記述
console.log('Aa1'.match(/\w\w/));
console.log('Aa1'.match(/\w\w/g));
console.log('Aa1_'.match(/\w\w/));
console.log('Aa1_'.match(/\w\w/g));
// 組み合わせて記述
console.log('Aa1_'.match(/\w\w_/));
console.log('Aa1_'.match(/a\w\w/));
//全角文字やアンダースコア以外の記号は対象とならない
console.log('あ1!?*/-_'.match(/\w/g));
実行結果
[ 'A', index: 0, input: 'Aa1', groups: undefined ]
[ 'A', 'a', '1' ]
[ 'Aa', index: 0, input: 'Aa1', groups: undefined ]
[ 'Aa' ]
[ 'Aa', index: 0, input: 'Aa1_', groups: undefined ]
[ 'Aa', '1_' ]
[ 'a1_', index: 1, input: 'Aa1_', groups: undefined ]
[ 'a1_', index: 1, input: 'Aa1_', groups: undefined ]
[ '1', '_' ]
文字や数字以外を検索する "\W"
- 何らかの文字や数字「以外」を検索するには「\W」を使用します
- 「\w」と真逆の結果を得るためのパターンです
// 1つ記述
console.log('A!_?'.match(/\W/));
console.log('A!_?'.match(/\W/g));
// 連続して記述
console.log('A!?*'.match(/\W\W/));
console.log('A!?*/'.match(/\W\W/));
console.log('A!?*/'.match(/\W\W/g));
// 組み合わせて記述
console.log('A!?*/'.match(/\w\W/));
console.log('A!?*/'.match(/\W\?/));
// 全角文字やアンダースコア以外の記号が対象となる
console.log('あ1!?*/-_'.match(/\W/g));
実行結果
[ '!', index: 1, input: 'A!_?', groups: undefined ]
[ '!', '?' ]
[ '!?', index: 1, input: 'A!?', groups: undefined ]
[ '!?', index: 1, input: 'A!?/', groups: undefined ]
[ '!?', '/' ]
[ 'A!', index: 0, input: 'A!?/', groups: undefined ]
[ '!?', index: 1, input: 'A!?/', groups: undefined ]
[ 'あ', '!', '?', '', '/', '-' ]
数字を検索する "\d"
- 半角数字「だけ」を検索するには「\d」を使います。
// 1つ記述
console.log('A12'.match(/\d/));
console.log('A12'.match(/\d/g));
// 連続して記述
console.log('A12'.match(/\d\d/));
console.log('A1234'.match(/\d\d/));
console.log('A1234'.match(/\d\d/g));
実行結果
[ '1', index: 1, input: 'A12', groups: undefined ]
[ '1', '2' ]
[ '12', index: 1, input: 'A12', groups: undefined ]
[ '12', index: 1, input: 'A1234', groups: undefined ]
[ '12', '34' ]
数字以外を検索する "\D"
- 半角数字以外を検索するには「\D」を使用する
- 「\d」と真逆の結果が得られます。
// 1つ記述
console.log('A1B'.match(/\D/));
console.log('A1B'.match(/\D/g));
// 連続して記述
console.log('AB1'.match(/\D\D/));
console.log('ABCD1'.match(/\D\D/));
console.log('ABCD1'.match(/\D\D/g));
実行結果
[ 'A', index: 0, input: 'A1B', groups: undefined ]
[ 'A', 'B' ]
[ 'AB', index: 0, input: 'AB1', groups: undefined ]
[ 'AB', index: 0, input: 'ABCD1', groups: undefined ]
[ 'AB', 'CD' ]
ラインフィードを検索 "\n"
- ラインフィード(改行文字)を検索するには「\n」を使います。
console.log(/\n/.test('hoge\nfuga'));
実行結果
true
キャリッジリターンを検索 "\r"
- キャリッジリターン(復帰文字)を検索するには「\r」を使います。
console.log(/\r/.test('hoge\rfuga'));
実行結果
true
タブ文字を検索 "\t"
- タブ文字を検索するには「\t」を使います
console.log(/\t/.test('hoge\tfuga'));
実行結果
true
改ページを検索 "\f"
- 改ページを検索するには「\f」を追加います
console.log(/\f/.test('hoge\ffuga'));
実行結果
true
空白を検索 "\s"
- 空白を検索するには「\s」を使います。
- 半角/全角スペース
- タブ
- 改行
- 改ページ
console.log('A B'.match(/\s/));
console.log("A \tB".match(/\s/g));
console.log("A\t\tB".match(/\s\s/));
console.log("\t \tA".match(/\s\s/));
console.log("\t \tA".match(/\s\s/g));
実行結果
[ ' ', index: 1, input: 'A B', groups: undefined ]
[ ' ', '\t' ]
[ '\t\t', index: 1, input: 'A\t\tB', groups: undefined ]
[ '\t ', index: 0, input: '\t \tA', groups: undefined ]
[ '\t ', ' \t' ]
空白以外を検索 "\S"
- 空白「以外」を検索するには「\S」を使います。
console.log('A B'.match(/\S/));
console.log("A \tB".match(/\S/g));
console.log("\t\tAB".match(/\S\S/));
console.log("\tABCD".match(/\S\S/));
console.log("\tABCD".match(/\S\S/g));
実行結果
[ 'A', index: 0, input: 'A B', groups: undefined ]
[ 'A', 'B' ]
[ 'AB', index: 2, input: '\t\tAB', groups: undefined ]
[ 'AB', index: 1, input: '\tABCD', groups: undefined ]
[ 'AB', 'CD' ]
単語の境目を検索 "\b"
- 文字列中の単語の境目を検索するには「\b」を使います。
- 「単語の境目」とは単語を構成する文字(a~z、A~Z、0~9、_)とそれ以外の文字との境目のこと
console.log("This IS a pen!".match(/\bis/));
console.log("This IS a pen!".match(/\bis/i));
console.log("This IS a pen!".match(/pen\b/));
console.log("This IS a pen!".match(/pen\b!/));
console.log("This IS a pen!".match(/\bT/));
console.log("This IS a pen!".match(/!\b/));
実行結果
null
[ 'IS', index: 5, input: 'This IS a pen!', groups: undefined ]
[ 'pen', index: 10, input: 'This IS a pen!', groups: undefined ]
[ 'pen!', index: 10, input: 'This IS a pen!', groups: undefined ]
[ 'T', index: 0, input: 'This IS a pen!', groups: undefined ]
null
単語の境目以外を検索 "\B"
- 単語の境目「以外」を検索するには「\B」を使います。
- 大文字の表記なので、「\b」と真逆の結果が得られます。
console.log("This IS a pen!".match(/\Bis/i));
console.log("This IS a pen!".match(/\BIS/));
console.log("This IS a pen!".match(/pen\B/));
console.log("This IS a pen!".match(/pen\B!/));
console.log("This IS a pen!".match(/\BT/));
console.log("This IS a pen!".match(/!\B/));
実行結果
[ 'is', index: 2, input: 'This IS a pen!', groups: undefined ]
null
null
null
null
[ '!', index: 13, input: 'This IS a pen!', groups: undefined ]
nullを検索 "\0"
- null文字を検索するには「\0」を使います。
console.log("abcAB\u0000CaBc".match(/ab/gi));
console.log("abcAB\u0000CaBc".match(/ab\0/gi));
実行結果
[ 'ab', 'AB', 'aB' ]
[ 'AB\u0000' ]