/** 首字母大写 apple -> Apple */ export function textCapitalize(str: string) { return str.charAt(0).toUpperCase() + str.slice(1) } const camelizeRE = /-(\w)/g /** 横杠转驼峰 user-tools -> userTools */ export function textCamelize(str: string) { return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : "")) } const hyphenateRE = /\B([A-Z])/g /** 驼峰转横杠 userTools -> user-tools */ export function textHyphenate(str: string) { return str.replace(hyphenateRE, "-$1").toLowerCase() } /** 分割字符串 * 按照驼峰、横杠、下划线、空格来分词 * * @example * "userTools" -> ["user", "Tools"] * "user-tools" -> ["user", "Tools"] * "user_tools" -> ["user", "Tools"] * "user tools" -> ["user", "Tools"] */ export function splitTextByCase(text: string) { return text .replace(/([a-z0-9])([A-Z])/g, "$1 $2") // 处理驼峰命名 .replace(/[-_]/g, " ") // 处理横杠和下划线 .split(" ") // 根据空格分割 .filter((x) => x !== "") // 移除空字符串 } /** * 将字符串按照驼峰、横杠、下划线、空格来分词,然后转换为大写、小写、首字母大写 * @example textCaseToSpace("userTools", "upper") -> "USER TOOLS" * @param text * @param caseType */ export function textCaseToSpace(text: string, caseType: "upper" | "lower" | "title" = "title") { if (!text) return text return splitTextByCase(text) .map((x) => { switch (caseType) { case "upper": return x.toUpperCase() case "lower": return x.toLowerCase() case "title": return textCapitalize(x) } }) .join(" ") }