質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

88.64%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 671
退会済みユーザー

退会済みユーザー

概要

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

//前略
{
  'type': 'textarea',
  'label': 'URLとその説明を入力',
  'optional':'true',
  'name': 'dialg_url'
}
//後略


このプログラムを実行すると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.postMessagedoPost()を使用しています。
入力した文字列は一つの配列に格納しています。

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

追記1

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

var dialog = {
    'token': 'xxxxxxxxxxxxxxxxxxxxxxx',
    "trigger_id": trigger_id,
    "dialog": JSON.stringify({"callback_id": "dialog4",
                              "state":message_ts+','+description,
                              "title": "追加情報を入力",
                              "submit_label": "Submit",
                              "elements": [
                              {"type": "textarea",
                              "label": "追加情報",
                              "name": "dialg_plus"
                              }]
                             })
}

追記2

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • madoka9393

    2018/11/05 15:23

    「正規表現で~」と言う記載がありましたが、必ず頭とお尻にそれぞれ「<(>)」が付与されるのであれば、先頭から1字及びお尻から1字を切り取るようにするのはどうでしょう?(根本的な解決にはならないかもしれませんが…)

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2018/11/05 15:58

    ありがとうございます。それができれば楽なんですが...URLのほかにも文字列はあるので、他の文字列で<>を消さないようにできると良いです。どちらにしろURLなのかどうかの判別が必要になりますね。

    キャンセル

  • madoka9393

    2018/11/05 16:01 編集

    入力文字例にとらわれてしまったいました。
    URLが含まれるかもしれないし含まれないかもしれない かつ どこに含まれるかわからない
    ということであれば、仰る通りURLかどうかの判定を入れて、URLだった場合のみ処理をしてあげるようにする位しか当方では思いつきませんでした。
    URLの判定について、URLの正規表現サンプル( https://www.megasoft.co.jp/mifes/seiki/s310.html )とかでカバーできそうですかね?

    キャンセル

回答 1

checkベストアンサー

0

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

または、

 pattern2
function testIsUrl(str){
  // url かを判定する処理
  return true;  // url なら
  return false; // url でないなら
}

対象の文字列.replace(/<(.+?)>/, function (match, p1){
  if(testIsUrl(p1)) return p1;
  return match;
}

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

 参考

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/08 15:35

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

    キャンセル

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

  • ただいまの回答率 88.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る