バリデーションルールや文字列置換でよく使うものを正規表現・組み合わせた実用例・書き方に分けてまとめました。
忘れがちな自分のため各記号の意味など初歩的な内容も含んでいるので、正規表現だけが知りたい!という方は下の目次から実用例までぶっ飛んでください。
JS/TSでのregexの使用を想定しているので、先頭と末尾にスラッシュを使用します。
例: /^正規表現$/
オプション
| g | マッチするすべて |
|---|---|
| i | 大文字、小文字の区別をしない |
基本的なやつ
文字単位で意味を持つものをまとめています。
| 正規表現 | 意味 |
|---|---|
^ | 文頭 |
$ | 文末 |
* | 直前の文字・パターンの0回以上の繰り返し |
+ | 直前の文字・パターンの1回以上の繰り返し |
? | 直前の文字・パターンの0回or1回の繰り返し |
. | 任意の1文字 |
\n | 改行 |
\t | タブ |
\s | 空白(改行・タブ・半角スペースも含む) |
\S | 空白(改行・タブ・半角スペースも含む)以外 |
\w | 半角英数字とアンダースコア(_) |
\W | 半角英数字とアンダースコア(_)以外 |
\l | 半角英小文字の中から1文字 こちらでは動作しなかったため要確認 |
\L | 半角英小文字以外の中から1文字 こちらでは動作しなかったため要確認 |
\u | 半角英大文字の中から1文字 こちらでは動作しなかったため要確認 |
\U | 半角英大文字以外の中から1文字 こちらでは動作しなかったため要確認 |
\d | 半角数字の中から1文字 |
\D | 半角数字以外の中から1文字 |
{min,max} | min回からmax回の繰り返しにマッチ |
{min,} | min回以上の繰り返しにマッチ |
{n} | n回の繰り返しにマッチ |
[abc] | a, b, cのいずれか1文字 |
[^abc] | a, b, cのどれも含まない1文字 |
a|b | aもしくはb |
基本的なやつを組み合わせた基本的なやつ
上記の文字の組み合わせで成り立つパターン群です。
| 正規表現 | 意味 |
|---|---|
.+ | 任意の文字列 |
[ -~] | 半角文字の1文字 |
[0-9] | 半角数字の中から1文字 |
[a-z] | 半角英小文字の中から1文字 |
[A-Z] | 半角英大文字の中から1文字 |
[a-zA-Z0-9] | 半角英数字の中から1文字 |
^[^ -~。-゚] | 全角文字の1文字 |
[a-zA-Z] | 半角英字の1文字 |
[ぁ-ん] | ひらがな1文字 |
(?=.*あああ) | あああを含む |
(?!=.*あああ) | あああを含まない |
実用例
| 項目 | 正規表現 |
|---|---|
| メールアドレス | /^[a-zA-Z0-9_.+-]+@([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\.)+[a-zA-Z]{2,}$/ |
| 郵便番号 | ^[0-9]{3}-[0-9]{4}$ |
| URL | ^https?://[\w/:%#\$&\?\(\)~\.=\+\-]+$ |
正規表現を使ったいろいろ
バリデーション
const user = { name: '太@郎', email: '[email protected]',} const validationRule = { // 半角記号を含めない name: /^\[^!@#$%^&*(),.?":{}|<>\]\*$/, // gmail縛り email: /^\[a-zA-Z0-9_.+-\]+@gmail.com$/} validationRule.name.test(user.name) // false validationRule.email.test(user.email) // false指定した単語がいくつあるか検索
const word = 'なま'const regexp = new RegExp(word, 'g')const text = 'なまむぎなまごめなまたまご'const wordCount = (text.match(regexp) || []).length wordCount // 3文字列の中に使われた自作の変数を置換
<変数>として使用されていることとします。
const user = { name: '太郎', age: 20,} const regexp = /<[^<>].+>/g const text = ` こんにちは。わたしの名前は<name>です。 年齢は<age>歳です。 よろしくお願いします。` text.replace(regexp, tag => { const key = tag.slice(1, tag.length - 1) as keyof typeof user return typeof user[key] !== 'undefined' ? \`${user[key]}` : tag}) /** * こんにちは。わたしの名前は太郎です。 * 年齢は20歳です。 * よろしくお願いします。 */