23 lines
663 B
JavaScript
23 lines
663 B
JavaScript
// @flow
|
|
import emojiRegex from "emoji-regex";
|
|
import unescape from "./unescape";
|
|
|
|
export default function parseTitle(text: string = "") {
|
|
const regex = emojiRegex();
|
|
|
|
// find and extract title
|
|
const firstLine = text.trim().split(/\r?\n/)[0];
|
|
const trimmedTitle = firstLine.replace(/^#/, "").trim();
|
|
|
|
// remove any escape characters
|
|
const title = unescape(trimmedTitle);
|
|
|
|
// find and extract first emoji
|
|
const matches = regex.exec(title);
|
|
const firstEmoji = matches ? matches[0] : null;
|
|
const startsWithEmoji = firstEmoji && title.startsWith(firstEmoji);
|
|
const emoji = startsWithEmoji ? firstEmoji : undefined;
|
|
|
|
return { title, emoji };
|
|
}
|