質問するログイン新規登録

Q&A

解決済

1回答

1571閲覧

出力先でURLが<>で囲まれないようにしたい

退会済みユーザー

退会済みユーザー

総合スコア0

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

0グッド

0クリップ

投稿2018/11/05 02:29

編集NaN/aN/aN aN:aN

0

0

###概要
Slack の Interactive Massage で JSON の構造に textarea を入れています(下のような感じ)。

JSON

1//前略 2{ 3 'type': 'textarea', 4 'label': 'URLとその説明を入力', 5 'optional':'true', 6 'name': 'dialg_url' 7} 8//後略

このプログラムを実行するとSlackでダイアログが開き、入力した文字列がSubmit後、 Google Spreadsheet に表示されます。
例えば、次の文字列を入力するとします。

<課題1> Slackのダイアログについて https://api.slack.com/dialogs

すると、Google spredsheet には次のように表示されます。

<課題1> Slackのダイアログについて <https://api.slack.com/dialogs>

URLが<>で囲まれて表示しないようにしたいのです。

正規表現で<>を消すことも考えたのですが、URL以外の<>は消したくないです。

なお、Slackへの投稿やGASの受信はchat.postMessage、doPost()を使用しています。
入力した文字列は一つの配列に格納しています。

良い方法を教えてください。

###追記1
<>がどのタイミングでつくようになったのか調べてみました。
上の処理をした後に、stateにmessage_tsとdescriptionを渡しているのですが、~~どうもこの時に<>がつくようです。~~その前に配列に格納していました。

JSON

1var dialog = { 2 'token': 'xxxxxxxxxxxxxxxxxxxxxxx', 3 "trigger_id": trigger_id, 4 "dialog": JSON.stringify({"callback_id": "dialog4", 5 "state":message_ts+','+description, 6 "title": "追加情報を入力", 7 "submit_label": "Submit", 8 "elements": [ 9 {"type": "textarea", 10 "label": "追加情報", 11 "name": "dialg_plus" 12 }] 13 }) 14}

###追記2
ダイアログを使用しないで、Slackの機能のTrigger Wordを使って調べてみました。
Trigger WordのあとにURLを含んだ文字列を入力して送信し、Google Spreadsheetに表示させたところ、<>が付きました。
入力された文字列データをGoogle apps Scriptで配列に格納しているので、配列化するとURLに<>が付くようです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

この質問の投稿者はすでに退会しているため、質問者からの返信がない点にご留意ください。

回答1件

0

ベストアンサー

pattern1

javascript

1対象の文字列.replace(/<(https?://[\w/:%#$&?()~.=+\-]+)>/, "$1");

または、

pattern2

javascript

1function testIsUrl(str){ 2 // url かを判定する処理 3 return true; // url なら 4 return false; // url でないなら 5} 6 7対象の文字列.replace(/<(.+?)>/, function (match, p1){ 8 if(testIsUrl(p1)) return p1; 9 return match; 10}

pettern1
  • 正規表現で前後に < と > で挟まれたurlを `$1" で抽出しています。
pettern2
  • 複雑な条件を出したいときに使えます。
  • replace の第二引数には関数を指定できるので、urlならば url 部分を返し、そうでなければそのまま返します。

参考

投稿2018/11/05 09:28

_lemon2003_

総合スコア274

退会済みユーザー

退会済みユーザー

2018/11/08 06:35

ありがとうございます!うまくいきました!
guest

この質問の投稿者はすでに退会しているため、質問者からの返信やベストアンサーの選定がない点にご留意ください。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.25%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問