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: '-' }
相关推荐
GuWenyue21 分钟前
放弃云端API!一套React+WebGPU本地LLM方案,零数据上传、离线可用
前端·人工智能·前端框架
原则猫2 小时前
函数/变量提升
前端
独泪了无痕2 小时前
Vue3 Hooks使用实战解析
前端·vue.js
程序喵大人3 小时前
【C++进阶】STL容器与迭代器 - 01 STL 容器先解决元素放在哪里
开发语言·c++·stl
cui_ruicheng3 小时前
Python从入门到实战(十六):多进程编程
开发语言·python
shawxlee4 小时前
vue3在public下封装config.js自定义配置动态数据,可在打包后直接修改,方便后端部署及后续维护
前端·javascript·经验分享·vue·团队开发·js·项目优化
用户059540174464 小时前
把记忆存储的回归测试从手工换成 Playwright + GitHub Actions,线上缺陷降低 80%
前端·css
触底反弹4 小时前
🚀 从 DOM0 级到 React 合成事件:前端事件监听的 20 年演进史
前端·react.js·面试
kyriewen4 小时前
我给前端项目的接口请求套了6层保护——才发现以前一直在裸奔
前端·javascript·面试
颜酱4 小时前
04 | 召回前置准备:搭好召回所需的四个数据库
前端·人工智能·后端