改行コード入りの文字列群を <p> タグの段落フォーマットに変換する正規表現
こうする。
const formatContent = (content: string): string => {
return content
.replace(/(([^\r\n]+(\r?\n)?)+)/gim, "<p>$1</p>")
.replaceAll(/\r?\n([^<])/gim, "<br />$1")
}
これは外部ユーザーによって投稿されたコメントを整形するために書いたのだけど、その中でリンク文字列を自動的に a タグ変換したかったので下記も追加した。
const formatContent = (content: string): string => {
return content
.replace(/(([^\r\n]+(\r?\n)?)+)/gim, "<p>$1</p>")
.replaceAll(/\r?\n([^<])/gim, "<br />$1")
// 下記を追加
.replaceAll(
/((<p>)|<br \/>)?(https?:\/\/[\w\/:;%#\$&\?\(\)~\.=\+\-]+)(\r?\n)?((<\/p>)|<br \/>)/gim,
'$1<a href="$3" rel="nofollow ugc">$3</a>$5'
)
}