You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Javascript提取字符串中长度可变的指定字段内容

实现方案

针对这种带固定字段前缀、字段间用空格分隔的场景,有两种常用的实现方式:

方案1:正则表达式匹配(推荐)

通过正则捕获组直接提取内容,不需要手动计算下标,天然适配可变长度的字段值:

const str = "OBX|10|TX|||Patient:  DOE,JOHN   Acct #:  1234567890   DOB:  01/01/1960 ";

// 提取患者姓名
const patientMatch = str.match(/Patient:\s*(\S+)/);
const patientName = patientMatch ? patientMatch[1].trim() : '';
// 输出结果:DOE,JOHN

// 提取出生日期
const dobMatch = str.match(/DOB:\s*(\S+)/);
const dob = dobMatch ? dobMatch[1].trim() : '';
// 输出结果:01/01/1960

正则逻辑说明:

  • Patient:\s* 匹配字段前缀Patient:加后面任意数量的空格
  • (\S+) 捕获后续所有非空白字符,即为需要的字段值
  • 末尾的trim()用来清除可能残留的多余空格,兼容格式波动

方案2:字符串下标截取(兼容原有逻辑)

你原来的代码问题是写死了结束位置,只需要把结束位置替换为下一个字段的起始下标即可:

const str = "OBX|10|TX|||Patient:  DOE,JOHN   Acct #:  1234567890   DOB:  01/01/1960 ";

// 提取患者姓名:结束位置取Acct字段的起始下标
const patientStart = str.indexOf("Patient: ") + "Patient: ".length;
const patientEnd = str.indexOf("Acct #:");
const patientName = str.slice(patientStart, patientEnd).trim();

// 提取出生日期:DOB是最后一个字段,不需要指定结束位置
const dobStart = str.indexOf("DOB: ") + "DOB: ".length;
const dob = str.slice(dobStart).trim();

内容的提问来源于stack exchange,提问作者Rick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:57:03