1.前言
先清除字符串首尾空白字符,再进行正则匹配。trim()确保清除字符串首尾空白字符串,match再进行正则匹配。
javascript
const trimmedStr = str.trim();
const result = trimmedStr.match(/your-regex/);
2.代码
javascript
function parseNameAndJob(str: string): { name: string; job: string } {
// 处理 null、undefined、非字符串
if (!str || typeof str !== 'string') {
return { name: '-', job: '-' };
}
const trimmed = str.trim();
// 特判:空字符串 或 仅为括号(中英文,允许中间有空格)
if (trimmed === '' || /^[((]\s*[))]$/.test(trimmed)) {
return { name: '-', job: '-' };
}
// 正则:匹配第一个左括号到第一个右括号之间的内容
// - 姓名部分:任意字符(可为空)
// - 职位部分:不包含右括号的任意字符(可为空)
const match = trimmed.match(/^(.*?)\s*[((]\s*([^))]*)\s*[))]/);
if (match) {
const name = match[1].trim();
const job = match[2].trim();
// 如果姓名为空,则 name 设为 '-'
// 否则保留姓名;job 为空则设为 '-'
return {
name: name === '' ? '-' : name,
job: job === '' ? '-' : job
};
}
// 未匹配到括号结构:整个字符串作为姓名
return { name: trimmed, job: '-' };
}
^:从开头匹配
(.*?):非贪婪捕获姓名(可为空)
\s*[((]:跳过空格,匹配左括号
([^))]*):关键! 只匹配不包含右括号 的内容,确保在第一个右括号处停止
\s*[))]:跳过空格,匹配右括号不使用
$:避免因末尾空格或多余字符导致匹配失败
调用方法输出结果
javascript
console.log(parseNameAndJob("(产品经理)"));
// 输出: { name: '-', job: '产品经理' }
console.log(parseNameAndJob("周杰()"));
// 输出: { name: '周杰', job: '-' }
console.log(parseNameAndJob("吴磊"));
// 输出: { name: '吴磊', job: '-' }