@atproto/api パッケージ で、このような正規表現で表されています。
export const TAG_REGEX = /(^|\s)[##]((?!\ufe0f)[^\s\u00AD\u2060\u200A\u200B\u200C\u200D\u20e2]*[^\d\s\p{P}\u00AD\u2060\u200A\u200B\u200C\u200D\u20e2]+[^\s\u00AD\u2060\u200A\u200B\u200C\u200D\u20e2]*)?/gu
@atproto/api パッケージ で、このような正規表現で表されています。
export const TAG_REGEX = /(^|\s)[##]((?!\ufe0f)[^\s\u00AD\u2060\u200A\u200B\u200C\u200D\u20e2]*[^\d\s\p{P}\u00AD\u2060\u200A\u200B\u200C\u200D\u20e2]+[^\s\u00AD\u2060\u200A\u200B\u200C\u200D\u20e2]*)?/gu
・行頭か空白文字の後の # (半角#) か #(全角#) で始まる
・#はその後に制御文字を追加して絵文字#️⃣にすることができるので、その場合は除外
・# の直後には数字、空白、および句読点類(括弧や各種ハイフンなども)は入らない
・その後は、「空白と一部の禁止文字以外」が続く
となってます。この空白には、半角スペースだけでなく、全角スペースやその他いろいろな幅のスペース文字、ゼロ幅文字なども入ります。数字には全角数字も、句読点括弧ハイフン類も半角記号だけでなく、Unicode のカテゴリ単位で含まれます。
・行頭か空白文字の後の # (半角#) か #(全角#) で始まる
・#はその後に制御文字を追加して絵文字#️⃣にすることができるので、その場合は除外
・# の直後には数字、空白、および句読点類(括弧や各種ハイフンなども)は入らない
・その後は、「空白と一部の禁止文字以外」が続く
となってます。この空白には、半角スペースだけでなく、全角スペースやその他いろいろな幅のスペース文字、ゼロ幅文字なども入ります。数字には全角数字も、句読点括弧ハイフン類も半角記号だけでなく、Unicode のカテゴリ単位で含まれます。