replaceのRegExpの書き方(アロー関数で短く各書き方)、正規表現のパターンいくつか(全部ではない)。 色付きにしてるので多少は見やすいと思います。
replace
JavaScriptで検索して置き換えるreplace
の書き方。
new RegExp
は正規表現
と言われるやつで、今回の記事はnew RegExp
での書き方でより短かく書く書き方のメモ。もっと云うとfunction
部をアロー関数
で書いて全体的に短く書けるんだね、ということ。
*動的に正規表現を作成
『new RegExp()』を使うと配列や変数から正規表現を作成可
*gフラグ:全文検索
該当するもの全部置き換え(gフラグがなかったら該当する最初の1コのみ)。
実際のコードで使うときgフラグ使ってることもあり、この記事ではgフラグも当たり前にある感じで話を進めます。
replace書き方:2種+1
(1) 通常の:
replace( /△△/g, '〇〇');
正規表現は「/ (スラッシュ)」で囲むので「/△△/g」。△△が置き換え前で、〇〇が置き換え後。△△や〇〇にはズバリ置き換え前の文字列を記述する。変数や配列は使えない。『え...、不便じゃね?』『配列や変数使えてナンボじゃねーの??』てことなので、replaceで配列や変数を使いたい場合はnew RegExp()使う。
(2) new RegExpの:function処理結果が置き換え後
replace( new RegExp(□□, 'g'), function(){return 〇〇; } );
(3) new RegExpでより短いの:function部をアロー関数で省スペース化
replace( new RegExp(□□, 'g'), ()=> 〇〇 );
記号□□は配列とか変数。『RegExpのfunctionもアロー関数で書いちゃっていいのかな?動くのかな??』と相当の時間差で思い至った。動くなら1行あたりかなりの省スペース化具合...!!(緑色のヶ所)。
正規表現
全部ではなくいくつか。個人的に『???』なやつも入れてる(いつか分かる日が来るのか...)
いくつか実際の例
■具体例1:コメントアウト
この例では「//」か「#」がコメントアウト始まり行
コメントアウト行(行そのもの)
/(^\s*\/\/.*\n|^\s*#.*\n)/g
«解説»
・行の先頭(「^」)に半角スペースが0回以上あって(「\s*」)
・「//」or「#」 …or(「|」を書いて)以下任意で追加可
・のあとに何らかの文字が0文字以上あり(「.*」)
・最後に改行コード(「\n」)がある
コメントアウト部分(何か書いた後のコメントアウト)
/(\/\/.*\n|#.*\n)/g
«解説»
・「//」or「#」から始まり
・のあとに何らかの文字が0文字以上あり(「.*」)
・最後に改行コード(「\n」)がある
«注意»
この書き方で半角スペースや全角スペースを入れてはいけない
(例えばhtmlなどのコードの感覚のまま)コードの視認性〜、とか何気なく入れたらNG
インラインコードとコードブロックで書くとそれぞれ以下。
/(^\s*\/\/.*\n|^\s*#.*\n)/g
/(\/\/.*\n|#.*\n)/g
/(^\s*\/\/.*\n|^\s*#.*\n)/g
/(\/\/.*\n|#.*\n)/g
■具体例2:文字種いろいろ
・全角ひらがな ⇒ /[\u3040-\u309F]/g
・CJK統合漢字 ⇒ /[\u3400-\u9FFF]/g
・CJK互換漢字 ⇒ /[\uF900-\uFAFF]/g
・カタカナ ⇒ /[\u30A1-\u30FA]/g
・大文字小文字英 ⇒ /[a-zA-Z]/g
・大文字小文字英+アンダーバーとハイフンも ⇒ /[a-zA-Z_-]/g
※「-(ハイフン)」を含ませたいときは最後に書く、じゃないと『[a-z]』の『aからz』の『から』のようなことになってうまく働かなくなる
正規表現で使うパターン
■通常の文字として使う
・「\」正規表現の文字の特別な意味を除去
例)
「\.」で、なんらかの1文字の「.」としてではなく(後述)、単なる文字としての「.」ドット
■特別な意味を表す文字パターン
・「.」何らかの1文字
・「\w」大文字小文字英、数字、「_(アンダースコア)」
「[a-zA-Z_0-9]」と同じ
・「\d」0〜9の数字 ※10進数 ※numberのnじゃないんかーい... 「[0-9]」
・「\t」タブ文字
・「\s」空白文字 ※文字コードがUTF-8の場合は全角スペースもマッチ、UTF-8じゃなかったら全角スペースはマッチしない
タブ、改行、改ページ、全角スペース、半角スペース「[\t\n\x0B\f\r]」
・「\S」非空白文字 ※なんのこっちゃ
■繰り返しを表すパターン
・「*」0文字以上の繰り返し
**「.*」**何らかの1文字の0回以上繰返し
*「/\d/」**0〜9の数字の0文字以上繰返し
・「+」1文字以上の繰り返し ※1文字以上存在しないと検出できない
「/\d+/」0〜9の数字の1文字以上繰返し
・「?」1回または0回
・「{}」繰り返す回数を指定
「{,n}」 n回以下、「{n,m}」 n回以上m回未満
■文字の位置を表すパターン
・「^」 行の先頭
・「$」 行の末尾
・「\b」 単語境界 ※なんのこっちゃよくわからん
・「\B」 単語境界以外 ※なんのこっちゃよくわからん
■任意の文字列を表すパターン
・「[ ]」一連の文字セットを表す ※1文字に限る
・「( )」文字パターンをグループ化する ※2文字以上のパターン
・「|」文字列を分ける ※2文字以上のパターンを複数列挙
■先読み、先読み否定
・「txt1(?<=txt2)」 肯定先読み:txt1に続いてtxt2が現れる場合のみ, txt1にマッチ
・「txt1(?<!txt2)」 否定先読み:txt1に続いてtxt2が現れない場合のみ, txt1にマッチ
■後読み、後読み否定
・「(?=txt2)txt1」 肯定後読み:txt1の直前にtxt2がある場合のみ、txt1にマッチ
・「(?!txt2)txt1」 否定後読み:txt1の直前にtxt2が現れない場合のみ、txt1にマッチ