#87 正規表現 基本から
正規表現の問題集を買ったので、備忘録的に。
こまめに解いて、ちょくちょく更新していく予定。
任意の一文字 .
任意の2文字 ..
.の数を増やすと3文字や4文字など任意の文字が抽出できる
任意の一文字 ただし英数字アンスコに限る \w
任意の2文字 ただし英数字アンスコに限る \w\w
\wの数を増やすと3文字や4文字など任意の英数字アンスコが抽出できる
ちなみにwはwordの略だそうです。
任意の一文字 英数アンスコ以外 \W
任意の2文字 英数アンスコ以外 \W\W
\Wの数を増やすと3文字や4文字など任意の英数字アンスコ以外が抽出できる
英数字アンスコ以外、つまり記号や2バイト文字やハイフン。ハイフンやピリオドなどは英数字じゃないらしい。
任意の空白 \s
他にも、改行や改ページもマッチするというけど、VSCodeだとマッチしなかった。
任意の空白以外2つ \S\S
\Sの数を増やすと3文字や4文字など任意の空白以外が抽出できる
任意の半角数字1つ \d
半角数字以外 \D
ここまでが任意の1文字のみ(n == 1)を抽出できるメタキャラクター
ここからは任意の文字が0以上(n > 0)抽出できるメタキャラクターの紹介
0回以上の繰り返し 直前の文字*
1回以上の繰り返し 直前の文字+
n回の繰り返しにマッチする 直前の文字{n}
n回以上の繰り返しにマッチする 直前の文字{n,}
n回以上m回以下の繰り返しにマッチ 直前の文字{n, m}
0回または1回の出現にマッチ 直前の文字?
下記のように書き換えも可能
gulpのreplaceで正規表現を使う
EJS
<title>
Document
</title>
</head>
<body>
<ol class="breadcrumb">
<li>ホーム</li>
<li>その1</li>
<li>その1詳細</li>
<li>その1超詳細</li>
</ol>
<ul>
<li>hoge</li>
<li>huga</li>
</ul>
<ol class="test">
<li>ホーム</li>
<li>その1</li>
<li>その1詳細</li>
<li>その1超詳細</li>
</ol>
こんにちは
<hr class="border" />
<hr class="dots" />
<hr />
function ejs1(){
return gulp.src('./src/*.ejs')
.pipe(replace(/(<ol class=\"breadcrumb\">)[\s\S]*?(<\/ol>)/g, '<ol>ほげ</ol>'))
.pipe(replace(/(<title>)[\s\S]*?(<\/title>)/g, '<title>ほげ</title>'))
.pipe(replace(/(hr.*) \/>/g, '$1>'))
.pipe(ejs())
.pipe(rename({ extname: ".html" }))
.pipe(gulp.dest(GENERATED_PATH))
}
html
<title>ほげ</title>
</head>
<body>
<ol>ほげ</ol>
<ul>
<li>hoge</li>
<li>huga</li>
</ul>
<ol class="test">
<li>ホーム</li>
<li>その1</li>
<li>その1詳細</li>
<li>その1超詳細</li>
</ol>
こんにちは
<hr class="border">
<hr class="dots">
<hr>
参考
正規表現の中で()で括られた部分はグループ化することができます。そしてグループにマッチした部分を置換時に$1で参照することにより部分置換を行える。() で括られたグループが多くなった場合も $1, $2, $3 ... にように$で始まる参照用変数を増やしていくことで対応できる。
この記事が気に入ったらサポートをしてみませんか?