ラベル 正規表現 の投稿を表示しています。 すべての投稿を表示
ラベル 正規表現 の投稿を表示しています。 すべての投稿を表示

JavaScriptで正規表現 (2)

メタ文字

Link:ECMAScriptで学ぶ正規表現

(2024.04.09 05:12)

ECMAScriptで学ぶ正規表現


学習リンク

JavaScriptで正規表現 (1)


JavaScriptで正規表現

JavaScript(ECMAScript)で正規表現を使う方法のまとめ

・ECMAScriptで正規表現を使うには「RegExp」クラス、「String」クラスの一部のメソッドを使う

・RegExpクラスを使うには3つの方法がある

1. コンストラクタにマッチングパターン、フラグを指定
※作成されるたびにコンパイル (ループ中でパターンが変換する場合に使う)
const regex = new RegExp('パターン'); // RegExp('oo');
const regex = new RegExp('パターン', 'フラグ'); // RegExp('oo', 'g');

2. リテラル記法 (一般的な使い方)
※評価時にコンパイル (ループ中で毎回同じパターンを使う場合は効率が良い)
const regex = /パターン/; // regex = /oo/';
const regex = /パターン/フラグ; // regex = /oo/g;

3. コンストラクタを介したリテラル記法
const regex = new RegExp(/パターン/); // RegExp(/oo/);
const regex = new RegExp(/パターン/, 'フラグ'); // RegExp(/oo/, 'g');

・testメソッド (マッチングするか調べる)
const regex = /[\d]{4}/; // 4桁の数字
const str = '225-0002';
console.log(regex.test(str)); // true

・execメソッド (マッチングした文字列を取り出す)
const regex = /[\d]{4}/;
const str = '225-0002';
const array = regex.exec(str);
if (array !== null) {
 console.log('${array[0]}'); // 0002
}

・Stringクラス+matchメソッド (マッチングした文字列を配列で取得)
const regex = /[\d]{3,4}/g;
const str = '225-0002';
const array = str.match(regex);
if (array !== null) {
 console.log(array); // ['225', '0002']
}

・Stringクラス+matchAllメソッド (マッチングした文字列を反復子で取得)
※gフラグを指定すること
const regex = /[\d]{3,4}/g;
const str = '225-0002';
const array = str.matchAll(regex);
for (const match of array) {
console.log(match[0]); // 225 と 0002
}

・Stringクラス+searchメソッド (マッチングした文字列の位置)
※先頭は0、ヒットしなければ-1
const str = '225-0002';
const regex1 = /[\d]{4}/;
console.log(str.search(regex1)); // 4
const regex2 = /[\d]{5}/;
console.log(str.search(regex2)); // -1

・Stringクラス+replaceメソッド (マッチングした文字列を別の文字列に置き換え)
※gフラグを指定するとマッチングした全ての文字列を置換
const regex = /[\d]{4}/;
const str = '225-0002-0003';
console.log(str.replace(regex, '9999')); // 225-9999-0003
const regex2 = /[\d]{4}/g;
console.log(str.replace(regex2, '9999')); // 225-9999-9999

・Stringクラス+replaceAllメソッド (マッチングした文字列を全て置換)
※gフラグを指定すること
const regex = /o{2}/g;
const str = 'Boo Foo Woo';
console.log(str.replaceAll(regex, 'ee')); // Bee Fee Wee


JavaScript, 正規表現

正規表現 #4:指定文字以降を削除したい



例) csvファイルの先頭項目以外をすべて削除したい

この場合、最初に見つかった "," 以降、行末までの全文字を消去することで対応できる。

これを正規表現で表すと
,.*$
※ "," + 任意文字(.)の繰り返し(*)で行末($)まで

見つかった文字列を "" で置換すれば良い。

ちなみに、見つかった文字を残し、見つかった文字より後ろの文字列を消去するには、
(?<=,).*$
となるらしい。


正規表現

■ 正規表現学習 #3:数字フォーマットで検索したい

例) "mmmmmmmm_nnnn_xxx….jpeg" という書式のファイル名を正規表現で表すには?
"m"と"n"は数字、"xxx…"は0文字以上の任意文字
"m"は数字8桁、"n"は数字4桁


・数字(半角数字)1文字は "\d" で表せる。
・文字数を指定するには上記に続いて "{文字数}" で指定する。
・"_xxx…." の部分は、
 ・"_" で始まり、
 ・0文字以上の文字 (ただし "." は除外すること。そうしないと拡張子まで含んでしまう)
・そして拡張子は ".jpeg" の固定文字。ただし"."はそのまま書くと "任意の1文字" の意味になってしまうので、エスケープし "\." と書く。

以上をまとめると・・・
^\d{8}_\d{4}_[^.]*\.jpeg
でいけそうな気がする。
(2020.09.07 修正) 正規表現先頭に "^" を付加。


正規表現

■ 正規表現学習 #2:可視化サイト


正規表現を可視化するサイト
https://jex.im/regulex/

正規表現初心者にはとても分かりやすくすばらしい


正規表現

■ 正規表現学習 #1:カッコ付きの文字を検索したい

文字列中より [1]、[2]、… [99] などの文字列を検索したい。


カッコは特殊文字なので \ (\ = 円記号) を付ける必要がある。
カッコ内は任意の0以上の文字なので .* とする。

以下の感じになる。
\[.*\]

でもカッコ内は1文字以上の数字ということで考えると、
\[\d+\]
こっちの方がいいかも。


正規表現

その他の記事