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



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}