training_data/packages/utils/src/string-utils.ts

80 lines
1.9 KiB
TypeScript
Executable File

/**
* 字符串工具函数库
* 提供对字符串常见处理的常用工具函数。
*/
/**
* 检查字符串是否为空或仅包含空格
*/
export const isEmptyOrWhitespace = (str: string): boolean => {
return !str || str.trim().length === 0;
};
/**
* 将字符串的首字母大写
*/
export const capitalize = (str: string): string => {
if (!str) return '';
return str.charAt(0).toUpperCase() + str.slice(1);
};
/**
* 转换成驼峰命名法 (camelCase)
*/
export const toCamelCase = (str: string): string => {
return str
.toLowerCase()
.replace(/[-_ ]+(\w)/g, (_, group: string) => group.toUpperCase());
};
/**
* 转换成蛇形命名法 (snake_case)
*/
export const toSnakeCase = (str: string): string => {
return str
.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`)
.replace(/[\s\-]+/g, '_')
.replace(/^_/, '')
.toLowerCase();
};
/**
* 转换成烤串命名法 (kebab-case)
*/
export const toKebabCase = (str: string): string => {
return str
.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`)
.replace(/[\s_]+/g, '-')
.replace(/^-/, '')
.toLowerCase();
};
/**
* 截断字符串到指定长度,超出部分使用 "..." 表示
*/
export const truncate = (str: string, length: number): string => {
if (str.length <= length) return str;
return str.slice(0, length) + '...';
};
/**
* 统计字符串中每个字符的出现次数
*/
export const charFrequency = (str: string): Record<string, number> => {
return str.split('').reduce((acc: Record<string, number>, char: string) => {
acc[char] = (acc[char] || 0) + 1;
return acc;
}, {});
};
/**
* 检查字符串是否是有效的 JSON
*/
export const isValidJSON = (str: string): boolean => {
try {
JSON.parse(str);
return true;
} catch {
return false;
}
};