Slackからコピーしたメッセージの正規表現パーサ
#Slack のチャンネルからメッセージを選択してコピーすると,体裁が崩れます.そこで,テキストから発言者名と発言内容を取得するパーサを書きました. code:pattern.js
const body = /^(?:(?<name>\S.*?)\n +)?(?<time>\d\d:\d\d)\n(?<body>(?:.|\n)*?)\n*(?:\n(?=(?:\S.*?\n +)?\d\d:\d\d\n)|$(?!\n))/gm;
const share = /(?:(?<=\n\n)(?<name_inner>.+)\n(?<body_inner>(?:.|(?<!\n)\n)+?)(?:もっと表示する\n)?^.* 内のスレッド \| (?<time_inner>.*) (?:\| 返信を確認する)?$)?/;
const emoji = /(?:^:^:+:\n\d+\n)*/; const replies = /(\d+ 件の返信(?:と \d+ 件の下書き)?\n(?:最終返信: )?^ス+スレッドを表示する\n)?/; const replyPrefix = /(?:このスレッドに返信しました :\n.+\n)?/;
const replySuffix = /(?:新しい返信を確認する\n)?/;
const spreadUrl = /(?:^(?<url>.+)\1\n(?<content>(?:.|\n)*?)(?=\n\n|$(?!\n)|\n(?::)))?/;
const channel = /^(?:(?<name>\S.*?)\n(?::^:+:)? +)?(?<time>\d\d:\d\d)\n(?:このスレッドに返信しました :\n.+\n)?(?<body>(?:.|\n)*?)(?: (編集済み) )?\n*?(?:^:^:+:\n\d+\n)*\n*?(?:新しい返信を確認する)?(?:\d+ 件の返信(?:と \d+ 件の下書き)?\n(?:最終返信: )?^ス+スレッドを表示する)?(?:New)?\n*(?:\n(?=(?:\S.*?\n(?::^:+:)? +)?\d\d:\d\d\n)|$(?!\n))/gm; const thread = /^(?:(?<name>\S.*?)\n(?::^:+:)? +)?(?<time>.+)\n(?:このスレッドに返信しました :\n.+\n)?(?<body>(?:.|\n)*?)(?: (編集済み) )?\n*?(?:^:^:+:\n\d+\n)*\n*?(?:チャンネルにも投稿済|\d+ 件の返信)?\n*(?:\n(?=\S.*?\n(?::^:+:)? +.+\n)|$(?!\n))/gm; export {channel, thread}