コラム:正規表現の実例

目次

説明

ここでは、『正規表現の実例』を色々と掲載します。

正規表現の実例

// 元の文章
var txt = '吾輩は猫である。名前はまだ無い。\n'
    + 'どこで生れたかとんと見当がつかぬ。\n'
    + '何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。\n'
    + '吾輩はここで始めて人間というものを見た。\n'
    + 'しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。';

特定の文字に『』を付ける

フラグ『g』で全て置換。

『吾輩|猫』で、『吾輩』あるいは『猫』。

『(~)』で、グループ化してあとで再利用可能に。

置換のところで「『』」として、再利用可能にした文字列を使用。

var res = txt.replace(/(吾輩|猫)/g, '『』');
document.write('<pre>' + res + '</pre><br>');

【結果】

『吾輩』は『猫』である。名前はまだ無い。
どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
『吾輩』はここで始めて人間というものを見た。
しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。

行の先頭に「# 」を付ける

フラグ『g』で全て置換。

フラグ『m』で、『^』を行頭、『$』を行末にマッチさせる。

『^』(行頭)を、『# 』に置換。

var res = txt.replace(/^/mg, '# ');
document.write('<pre>' + res + '</pre><br>');

【結果】

# 吾輩は猫である。名前はまだ無い。
# どこで生れたかとんと見当がつかぬ。
# 何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
# 吾輩はここで始めて人間というものを見た。
# しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。

行の末尾に「!!」を付ける

フラグ『g』で全て置換。

フラグ『m』で、『^』を行頭、『$』を行末にマッチさせる。

『$』(行末)を、『!!』に置換。

var res = txt.replace(/$/mg, '!!');
document.write('<pre>' + res + '</pre><br>');

【結果】

吾輩は猫である。名前はまだ無い。!!
どこで生れたかとんと見当がつかぬ。!!
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。!!
吾輩はここで始めて人間というものを見た。!!
しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。!!

改行を取り除き、20文字ごとに改行

フラグ『g』で全て置換。

『\n』を『』(空文字)に置換して、改行をなくす。

『.{20}』(任意の文字を20回)を『(~)』でグループ化して、あとで再利用可能に。

『\n』で、20文字で切り出した末尾に改行を加える。

var res = txt.replace(/\n/g, '').replace(/(.{20})/g, '\n');
document.write('<pre>' + res + '</pre><br>');

【結果】

吾輩は猫である。名前はまだ無い。どこで生
れたかとんと見当がつかぬ。何でも薄暗いじ
めじめした所でニャーニャー泣いていた事だ
けは記憶している。吾輩はここで始めて人間
というものを見た。しかもあとで聞くとそれ
は書生という人間中で一番獰悪な種族であっ
たそうだ。

10文字ごとに改行

フラグ『g』で全て置換。

『.{10}』(任意の文字を10回)を『(~)』でグループ化して、あとで再利用可能に。

ただし、そのあとに『(?!\n)』があるので、改行が次に来ないことが条件。

『\n』で、10文字で切り出した末尾に改行を加える。

var res = txt.replace(/(.{10})(?!\n)/g, '\n');
document.write('<pre>' + res + '</pre><br>');

【結果】

吾輩は猫である。名前
はまだ無い。
どこで生れたかとんと
見当がつかぬ。
何でも薄暗いじめじめ
した所でニャーニャー
泣いていた事だけは記
憶している。
吾輩はここで始めて人
間というものを見た。
しかもあとで聞くとそ
れは書生という人間中
で一番獰悪な種族であ
ったそうだ。

数字に3桁ずつカンマを入れる

フラグ『g』で全て置換。

『\d』は数字に一致。

ただし、そのあとに『(?=(\d{3})+$)』があるので、『\d{3}』(数字3つ)を、『+』で1回以上繰り返したあと『$』(末尾)か『\D』(数字以外)が来ることが条件。

『,』で、切り出した末尾にカンマを加える。

var res = ('1234567890 / 1234').replace(/(\d)(?=(\d{3})+($|\D))/g, ',');
document.write('<pre>' + res + '</pre><br>');

【結果】

1,234,567,890 / 1,234

全角半角混じりの数字を半角に

フラグ『g』で全て置換。

『[0-9]』で、全角の『0』から『9』の文字。

関数で置換を行なう。『charCodeAt(0)』で『0』文字目の文字コードを得られる。一致した文字の文字コードから、『0』(全角)の文字の文字コードを引く。その結果、『0~9』の数値になる。

var res = ('0123-4567-8901').replace(/[0-9]/g, function(s) {
    return s.charCodeAt(0) - '0'.charCodeAt(0);
});
document.write('<pre>' + res + '</pre><br>');

【結果】

0123-4567-8901

全角半角混じりの英数字を半角に

フラグ『g』で全て置換。

『[A-Za-z0-9_]』で、全角の英数字。

関数で置換を行なう。『charCodeAt(0)』で『0』文字目の文字コードを得られる。一致した文字の文字コードから、『0』(全角)の文字の文字コードを引く。さらに『0』(半角)の文字コードを加え、『String.fromCharCode』で文字コードから文字を生成する。

その結果、半角の英数字になる。

var res = ('Abcd_0123456789_EfghI')
.replace(/[A-Za-z0-9_]/g, function(s) {
    return String.fromCharCode(
        s.charCodeAt(0) - '0'.charCodeAt(0) + '0'.charCodeAt(0)
    );
});
document.write('<pre>' + res + '</pre><br>');

【結果】

Abcd_0123456789_EfghI

サンプルの入手

以下は、今回出てきたサンプルです。

ZIPでまとめてダウンロード (右クリックから保存してください)

sample1.html』(サンプル)を表示

プログラムの中身を見たい場合は、それぞれのHTMLファイルをブラウザで開いたあと、右クリックをして『ソースの表示』を選択してください。

メモ帳で、ファイルの中身を見ることができます。