如何使用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
相关产品推荐
相关产品推荐

