Link:ECMAScriptで学ぶ正規表現
(2024.04.09 05:12)
※ 記事一覧
ECMAScriptで学ぶ正規表現
| No | 日付 | 内容 | チェック |
|---|---|---|---|
| 2 | 2022.02.18 | 基本的な正規表現パターンの書き方――使用頻度の高い「メタ文字」と「エスケープ」 | 2024.04.09 |
| 1 | 2022.01.14 | 「正規表現」とは――すぐに使う方法と「ECMAScript」のバージョン | 2024.04.09 |
学習リンク
JavaScriptで正規表現 (1)
JavaScriptで正規表現
JavaScript(ECMAScript)で正規表現を使う方法のまとめ
・ECMAScriptで正規表現を使うには「RegExp」クラス、「String」クラスの一部のメソッドを使う
・RegExpクラスを使うには3つの方法がある
・testメソッド (マッチングするか調べる)
・execメソッド (マッチングした文字列を取り出す)
・Stringクラス+matchメソッド (マッチングした文字列を配列で取得)
・Stringクラス+matchAllメソッド (マッチングした文字列を反復子で取得)
・Stringクラス+searchメソッド (マッチングした文字列の位置)
・Stringクラス+replaceメソッド (マッチングした文字列を別の文字列に置き換え)
・Stringクラス+replaceAllメソッド (マッチングした文字列を全て置換)
・ECMAScriptで正規表現を使うには「RegExp」クラス、「String」クラスの一部のメソッドを使う
・RegExpクラスを使うには3つの方法がある
1. コンストラクタにマッチングパターン、フラグを指定
2. リテラル記法 (一般的な使い方)
3. コンストラクタを介したリテラル記法
※作成されるたびにコンパイル (ループ中でパターンが変換する場合に使う)
const regex = new RegExp('パターン'); // RegExp('oo');
const regex = new RegExp('パターン', 'フラグ'); // RegExp('oo', 'g');
const regex = new RegExp('パターン', 'フラグ'); // RegExp('oo', 'g');
2. リテラル記法 (一般的な使い方)
※評価時にコンパイル (ループ中で毎回同じパターンを使う場合は効率が良い)
const regex = /パターン/; // regex = /oo/';
const regex = /パターン/フラグ; // regex = /oo/g;
const regex = /パターン/フラグ; // regex = /oo/g;
3. コンストラクタを介したリテラル記法
const regex = new RegExp(/パターン/); // RegExp(/oo/);
const regex = new RegExp(/パターン/, 'フラグ'); // RegExp(/oo/, 'g');
const regex = new RegExp(/パターン/, 'フラグ'); // RegExp(/oo/, 'g');
・testメソッド (マッチングするか調べる)
const regex = /[\d]{4}/; // 4桁の数字
const str = '225-0002';
console.log(regex.test(str)); // true
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
}
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']
}
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
}
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
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
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
const str = 'Boo Foo Woo';
console.log(str.replaceAll(regex, 'ee')); // Bee Fee Wee
JavaScript, 正規表現
正規表現 #4:指定文字以降を削除したい
※ 前回記事:#3:数字フォーマットで検索したい
例) csvファイルの先頭項目以外をすべて削除したい
この場合、最初に見つかった "," 以降、行末までの全文字を消去することで対応できる。
これを正規表現で表すと
見つかった文字列を "" で置換すれば良い。
ちなみに、見つかった文字を残し、見つかった文字より後ろの文字列を消去するには、
この場合、最初に見つかった "," 以降、行末までの全文字を消去することで対応できる。
これを正規表現で表すと
,.*$
※ "," + 任意文字(.)の繰り返し(*)で行末($)まで見つかった文字列を "" で置換すれば良い。
ちなみに、見つかった文字を残し、見つかった文字より後ろの文字列を消去するには、
(?<=,).*$
となるらしい。正規表現
■ 正規表現学習 #3:数字フォーマットで検索したい
例) "mmmmmmmm_nnnn_xxx….jpeg" という書式のファイル名を正規表現で表すには?
"m"と"n"は数字、"xxx…"は0文字以上の任意文字
"m"は数字8桁、"n"は数字4桁
・数字(半角数字)1文字は "\d" で表せる。
・文字数を指定するには上記に続いて "{文字数}" で指定する。
・"_xxx…." の部分は、
・"_" で始まり、
・0文字以上の文字 (ただし "." は除外すること。そうしないと拡張子まで含んでしまう)
・そして拡張子は ".jpeg" の固定文字。ただし"."はそのまま書くと "任意の1文字" の意味になってしまうので、エスケープし "\." と書く。
以上をまとめると・・・
(2020.09.07 修正) 正規表現先頭に "^" を付加。
"m"と"n"は数字、"xxx…"は0文字以上の任意文字
"m"は数字8桁、"n"は数字4桁
・数字(半角数字)1文字は "\d" で表せる。
・文字数を指定するには上記に続いて "{文字数}" で指定する。
・"_xxx…." の部分は、
・"_" で始まり、
・0文字以上の文字 (ただし "." は除外すること。そうしないと拡張子まで含んでしまう)
・そして拡張子は ".jpeg" の固定文字。ただし"."はそのまま書くと "任意の1文字" の意味になってしまうので、エスケープし "\." と書く。
以上をまとめると・・・
^\d{8}_\d{4}_[^.]*\.jpeg
でいけそうな気がする。(2020.09.07 修正) 正規表現先頭に "^" を付加。
正規表現
■ 正規表現学習 #1:カッコ付きの文字を検索したい
文字列中より [1]、[2]、… [99] などの文字列を検索したい。
カッコは特殊文字なので \ (\ = 円記号) を付ける必要がある。
カッコ内は任意の0以上の文字なので .* とする。
以下の感じになる。
でもカッコ内は1文字以上の数字ということで考えると、
カッコは特殊文字なので \ (\ = 円記号) を付ける必要がある。
カッコ内は任意の0以上の文字なので .* とする。
以下の感じになる。
\[.*\]
でもカッコ内は1文字以上の数字ということで考えると、
\[\d+\]こっちの方がいいかも。
正規表現
登録:
投稿 (Atom)
その他の記事
-
自宅には デスクトップPC(Win10Pro) と ノートPC(Win10Home) があるが、デスクトップPCのモニタが故障してしまった。 ということで、しばらくはノートPCからデスクトップへリモートデスクトップ接続し操作を行うことで代用しようと思うが、 そう...
-
au SHL23でEメールを受信しようとすると「本体メモリ空き容量不足」となり受信できない。 対処 ・他のアプリでキャッシュを大量に消費しているものがあればキャッシュを削除する。 ・不要なアプリはアンインストールする 今回はこれで受信できるようになった。 ...
-
リモートデスクトップ接続しようとすると「お使いの資格情報は機能しませんでした」と表示され接続できない。 状況 ■ リモート側 ・Windows7 Pro:Workgroup環境 ・システムのプロパティ → [リモート]タブでリモートデスクトップの設定を「ネッ...
-
BitLockerを有効化した際、どの程度暗号化が進んでいるのか分からない。 進捗を確認するには? コマンドプロンプト(管理者)で "manage-bde -status" コマンドで確認できる。 C:\Windows\sys...
-
iPhone7とPCをUSB(USB2.0)で接続し、エクスプローラにてiPhoneの写真とビデオ(Apple iPhone\Internal Storage\DCIM)をPCにコピーする。 その際、複数ファイルを選択しPCへ移動させると、高確率で「デバイスに到達できません」...