正規表現とは何か?
正規表現(Regular Expression)は、文字列内のパターンを記述する方法です。これを使用して、特定の部分文字列が存在するかどうかを確認したり、置換を行ったり、条件に一致する部分文字列を抽出することができます。
正規表現を使う理由
以下は、複雑な文字列処理を簡単にするための例です。
// 文字列中のすべての数字を見つける
let str = 'abc123de45fgh6789qqq111';
// 方法1: ループを使用
function extractNumbers(str) {
let temp = '';
let result = [];
for (let i = 0; i < str.length; i++) {
if (!isNaN(str[i])) {
temp += str[i];
} else {
if (temp) {
result.push(temp);
temp = '';
}
}
}
if (temp) {
result.push(temp);
}
return result;
}
console.log(extractNumbers(str)); // ["123", "45", "6789", "111"]
// 方法2: 正規表現を使用
let pattern = /\d+/g;
console.log(str.match(pattern)); // ["123", "45", "6789", "111"]
正規表現を使用することで、コードが簡潔になり、より効率的になります。
正規表現の作成方法
正規表現は次の2つの方法で作成できます。
- リテラル形式:`/pattern/flags`
- コンストラクタ形式:`new RegExp(pattern, flags)`
`flags`には以下のオプションがあります:
- `i`: 大文字小文字を区別しない
- `m`: 複数行にまたがるマッチングを可能にする
- `g`: 全ての一致する箇所を探す
メタキャラクター
以下は一般的なメタキャラクターとその役割です。
- `\d`: 数字 [0-9]
- `\w`: アルファベットまたは数字およびアンダースコア [a-zA-Z0-9_]
- `\s`: 空白文字(スペース、タブなど)
- `\D`, `\W`, `\S`: 各々の否定形
- `.`: 改行以外の任意の文字
- `|`: または
- `()`: グルーピング
量詞
量詞は、一致するべき回数を指定します。
- `*`: 0回以上
- `+`: 1回以上
- `?`: 0回または1回
- `{n}`: 精確にn回
- `{n,}`: n回以上
- `{n,m}`: n回からm回まで
正規表現の特性
貪欲性と非貪欲性
正規表現はデフォルトで可能な限り多くの文字をキャプチャしようとします(貪欲)。これを制限するには、量詞の後に`?`を追加します(非貪欲)。
let text = '123aaa456';
let greedyPattern = /\d+/;
console.log(text.match(greedyPattern)); // ["123"]
let lazyPattern = /\d+?/g;
console.log(text.match(lazyPattern)); // ["1", "2", "3", "4", "5", "6"]
関連メソッド
test
与えられた文字列がパターンに一致するかをチェックします。
let str = 'abc';
let regex = /\w+/;
console.log(regex.test(str)); // true
exec
最初に一致する部分を返します。
let str = 'abc123cba456aaa789';
let regex = /\d+/;
console.log(regex.exec(str)); // ["123", index: 3, input: "abc123cba456aaa789"]
match
全ての一致する部分を配列として返します。
let str = 'abc123cba456aaa789';
let regex = /\d+/g;
console.log(str.match(regex)); // ["123", "456", "789"]
replace
一致する部分を置き換えます。
let str = 'a111bc222de';
let replacedStr = str.replace(/\d/g, 'X');
console.log(replacedStr); // "aXXXbcXXXde"