0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

正規表現入門 第二回 メタ文字検索

Last updated at Posted at 2020-07-19

メタ文字とは

  • メタ文字とは正規表現において特別な意味を持つ文字のことで、メタキャラクタとも呼ばれることがあります。
  • 規則を理解してしまえば、記憶するべき情報はそれほど多くありません。
  • メタ文字そのものを検索したい場合は、検索する値を「\」でエスケースする必要があります。
メタ文字検索の例.js
console.log('?!?!?!'.match(/\?/g));

実行結果
[ '?', '?', '?' ]

単一の文字の検索 "."

  • 何らかの単一文字を検索するにはピリオド(.)を使います。
  • 連続でピリオドを記述した場合、「記述した数分連続した文字」が検索対象となります。
2-1(単一文字の検索).js
// 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
  • 半角のアンダースコア(_)
2-2(文字や数字を検索).js
// 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」と真逆の結果を得るためのパターンです
2-3(文字や数字以外を検索する).js
// 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」を使います。
2-4(数字を検索する).js
// 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」と真逆の結果が得られます。
2-5(数字以外を検索する).js
// 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」を使います。
2-6(ラインフィードを検索).js
console.log(/\n/.test('hoge\nfuga'));

実行結果
true

キャリッジリターンを検索 "\r"

  • キャリッジリターン(復帰文字)を検索するには「\r」を使います。
2-7(キャリッジリターンを検索).js
console.log(/\r/.test('hoge\rfuga'));

実行結果
true

タブ文字を検索 "\t"

  • タブ文字を検索するには「\t」を使います
2-8(タブ文字を検索).js
console.log(/\t/.test('hoge\tfuga'));

実行結果
true

改ページを検索 "\f"

  • 改ページを検索するには「\f」を追加います
2-9(改ページを検索).js
console.log(/\f/.test('hoge\ffuga'));

実行結果
true

空白を検索 "\s"

  • 空白を検索するには「\s」を使います。
  • 半角/全角スペース
  • タブ
  • 改行
  • 改ページ
2-10(空白を検索).js
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」を使います。
2-11(空白以外を検索).js
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、_)とそれ以外の文字との境目のこと
2-12(単語の境目を検索).js
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」と真逆の結果が得られます。
2-13(単語の境目以外を検索).js
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」を使います。
2-14(nullを検索する).js
console.log("abcAB\u0000CaBc".match(/ab/gi));
console.log("abcAB\u0000CaBc".match(/ab\0/gi));

実行結果
[ 'ab', 'AB', 'aB' ]
[ 'AB\u0000' ]

参考URL

次回予告

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?