0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【TypeScript】正規表現 RegExp メモ

Last updated at Posted at 2022-10-04
  • いままで書いてきた正規表現リテラルの書き方(括弧の中身が出力される)
const text = 'abc(def)ghi';
const matchText = text.match(/\((.+)\)/);
console.log(matchText![1]);
//def

何が問題なのか??

正規表現リテラルを使うと変数で指定できない(もしかしたらできるかも)

  • 試してみた例↓
const front = '(';
const end = ')';
const matchText = text.match('/\' + front + '(.+)\' + end '/');//できない

frontを前の括弧、endを後ろの括弧として指定してみたができなかった

RegExpを使ってみる

正規表現リテラルを使う以外にもRegExpというコンストラクタを使用する方法があるようだ
参照:https://www.wareko.jp/blog/typescript-which-is-better-regexp-or-regular-expression-literal

  • 実際に書いてみる
const text = 'abc(def)ghi';
const left = '(';
const right = ')';
const regexp = new RegExp('\\' + left + '(.+)\\' + right);
const matchText = text.match(regexp)![1];
console.log(matchText);
//def

先ほど同様、frontを前の括弧、endを後ろの括弧として指定
regexpを変数としてRegExpコンストラクタを生成して、正規表現パターンを指定してあげるとうまく出力された!

注意点

注意点は主に2つ
1. 正規表現リテラルをそのままコンストラクタに入れない

const text = 'abc(def)ghi';
const left = '(';
const right = ')';
// const regexp = new RegExp('\\' + left + '(.+)\\' + right);
const regexp = new RegExp('/\' + left '(.+)\' + right '/');//エラー

5行目の正規表現リテラルで使用していた'/'はRegExpでは不要

2. \は2重にする必要あり

const regexp = new RegExp('\' + left + '(.+)\' + right);//これだと動かない
const regexp = new RegExp('\\' + left + '(.+)\\' + right);//これだと動く 
0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?