Created 2020年2月27日1:06
Updated 2020年2月27日1:09
Categories
nodejs
SlackでOutgoing WebhookからFaaSに投稿を飛ばして、メッセージによってはFaaSから投稿を行なうみたいな事をしたいシチュエーションがありました。
今回はNode.jsで投稿をフィルタリングするため、正規表現やSlackのメッセージの仕様について調べてみました(投稿を受け取る部分は扱いません)。
余談ですが、Node.jsってNodeって略すのが一般的ですよね。
NodeだけだとイマイチJavascript感がなくて実感が沸かないです・・・慣れですかねw
@channel error/warning targetService
targetService
を文字列として取りたいtargetService
は英数字で構成const regex = /<\!channel>\s-\s(error|warning)\s([a-zA-Z0-9]+)/
もっと良い方法があるかもしれませんが、ポイントとしては
@channel
はNode側(WebHook受け取り側)では <!channel>
になるようです(環境によるかもしれません)!
はエスケープ( <
や >
などは不要 )\s
グループは2つあるため、targetServiceを受け取るためには
const testSlack = (message) => {
if (regex.test(message)) {
return message.match(regex)[2]
} else {
return undefined
}
}
みたいな感じで、配列の3つ目を指定すれば良さそうです(インデックス0にはマッチした文字列全体が入ります)。
Slackのメッセージは見た目とはちょっと違う形でNodeに渡されていて戸惑いました。
余談ですが、正規表現は書けると気持ちが良い一方で、よっぽど慣れていない限り後々になって問題が発生しがちな気がします。
あまり複雑にしすぎず、なるべくシンプルな形で使う事をおすすめします。