Slackからコピーしたメッセージの正規表現パーサ
#Slack のチャンネルからメッセージを選択してコピーすると,体裁が崩れます.そこで,テキストから発言者名と発言内容を取得するパーサを書きました.
pattern.jsconst 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}