js-清除首尾空白字符再进行空白匹配str.trim().match(...)

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: '-' }
相关推荐
kyriewen2 小时前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试
IT_陈寒2 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
山河木马3 小时前
矩阵专题2-怎么创建视图矩阵(uViewMatrix)
javascript·webgl·计算机图形学
小林攻城狮3 小时前
使用 Transport 节流解决 Vercel AI SDK 流式渲染卡死问题
前端·react.js
前端缘梦3 小时前
告别 TS 运行时类型漏洞!Zod 完整入门实战教程(前端 / 全栈必备)
前端·react.js·全栈
the_answer3 小时前
Webpack vs Vite 深度对比分析
前端·webpack
转转技术团队4 小时前
验证码识别实战:前端不写页面,改训模型了?
前端
MomentYY4 小时前
Temperature:AI 的“脑洞旋钮”
前端·llm·ai编程
远航_4 小时前
OpenSpec 完整详细介绍
前端·后端
召钱熏4 小时前
状态枚举正确≠渲染正确:一个语音按钮的状态机边界修复实录
android·前端