【GAS】よく使う正規表現、間に挟まれた文字列のみを取得する、改行を含んで文字列を取得する 複数行にマッチする方法

2021-11-07

当サイトではアフィリエイト広告を利用して商品を紹介しています。

programmer work with Developing programming and coding technologies. Programmer working with software on many computer on the table in office. concept Website design

Desktop Computer Stock photos by Vecteezy

みなさん、こんにちは!
そーちゃん(@black777cat)です。

今回はGASで個人的によく使う正規表現2つの紹介です。

タグなどの間に挟まれた文字列のみを取得する

function code_01(){
  const text = '<a href= "https://www.amazon.jp/hz/wishlist/ls/1Z0X9ZM1D65A7" >欲しい物リスト</a>'

  const befor_text = '<a href= "'
  const after_text = '" >'

  const regexp = new RegExp( '(?<=' + befor_text + ').*?(?=' + after_text + ')' )
  const match_text = text.match(regexp)

  console.log(match_text[0])

  //結果:https://www.amazon.jp/hz/wishlist/ls/1Z0X9ZM1D65A7
}

肯定の先読み (?= パターン  )
肯定の後読み (?<= パターン )

こちらの2つを使って間の文字列だけを取得します。

改行を含んで文字列を取得する

function code_02(){
  const text = 'あいうえお\nかきくけこ\nさしすせそ' 

  const regexp = new RegExp( /あいうえお[\s\S]*?さしすせそ/)
  const match_text = text.match(regexp)

  console.log(match_text[0])
  
  //結果:
  //あいうえお
  //かきくけこ
  //さしすせそ
}

[\s\S]を使うと改行を含むすべたの文字列にマッチする文字列を取得できます。

正規表現で複数を検索する

function code_03(){
  const text = 'あいうえおかきくけこあいうえお' 

  const regexp = new RegExp( /あいうえお/,"g") // g でグローバル(全体)検索
  const match_text = text.match(regexp)

  console.log(match_text)
  //[ 'あいうえお', 'あいうえお' ]
  
}

これは正規表現の最後にオプションフラグgを追加することで対応できます。


フラグ説明
d一致した部分文字列の位置を生成します。
gグローバル検索を行います。
i大文字・小文字を区別しない検索です。
m複数行の検索です。
s. を改行文字と一致するようにします。
u"unicode" です。パターンを一連の Unicode コードポイントとして扱います。
y対象文字列の現在の位置から始まる部分に一致するものを探す「先頭固定」 (sticky) 検索を行います。 sticky のページを参照してください。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions

参考サイト

先読みと後読みを使ったパターンの記述
https://www.javadrive.jp/javascript/regexp/index14.html

プログラミング

Posted by sochan