業務改善 web開発 programming 旅行系記事多め。

【GAS】sliceやsubstrなどで文字列抽出がうまくできない時に確認すること

gasGAS

ぱらげです。
Google Apps Script(GAS)で文字列の一部を切り出したいのに、sliceやsubstrメソッドを使ってうまくできない場合、まず以下の点について確認してみてください。

型が文字列になっているか

「<a href=”https://news.yahoo.co.jp/pickup/6409452″ data-ylk=”rsec:tpc_maj;slk:title;pos:1;” data-ual-gotocontent=”true” class=”sc-frDJqD bJCuGd” data-rapid_p=”36″>ファイザー3回目接種 特例承認</a>」

例えばyahooニュースからスクレイピングしてきたこのような情報があるとします。
aタグに含まれているリンク「”https://~”」のみを抽出したい場合は以下のようなコードになります。「変数」にはyahooで取得した情報が格納されているとします。

//先頭10文字目から39文字を抽出
var link = 変数.substr(9,39);

しかし、これを実行するとエラーが出ることがあります。

TypeError: 変数.substr is not a function

このような場合は型が文字列になっていない場合があります。
試しに下のコードで型を確認してみて[object String]と出力されている場合は問題ないです。

Logger.log(Object.prototype.toString.call(変数));

しかし、[object Object]と出力されている場合はオブジェクト型の変数なので、さらに文字列が格納されている箇所を指定するか、文字列型変数に変換する必要があります。(DateやNumberも意味合いは同じです)

オブジェクトの場合は以下のコードで、抽出元情報がある項目を探す必要があります。

Logger.log(JSON.stringify(変数));

「”content”」の中に情報があることを確認したので、抽出するコードをこのように記載します。

var link = 変数.content.substr(9,39);

これで実行すると先ほどのエラーは出なくなります。

文字列の前後にスペースがないか

var link = 変数.substr(9,39);

先ほどと同様にsliceやsubstrで抽出箇所を指定しているのに、なぜか指定通りに文字が抽出できなかったり、元の文字列のままだったりすることがあります。
このような場合は文字列の前後に余計なスペースが入っている可能性があり、あらかじめtrimで余計なスペースを取り除きましょう。

//前後のスペースを除去
var link = 変数.trim();

//文字を抽出
var link = 変数.substr(9,39);

コメント

タイトルとURLをコピーしました