LoginSignup
0
2

More than 1 year has passed since last update.

[js]replaceの書き方、正規表現

Last updated at Posted at 2021-04-12

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にマッチ

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2