如何使用JavaScript删除HL7 OBX 5.1字段中首个\.后的内容
问题分析
- 匹配目标转义错误:你要匹配的是
\.字符串,在JS字符串字面量中需要写为'\\.'才能正确表示反斜杠+小数点的组合,你当前定义的模式变量后续判断逻辑完全没有用到。 - 自定义substring函数逻辑错误:函数内部硬编码调用了外部变量
OBX_TestValue,没有使用传入的参数ssstringToTrim;且JS的String.substring()不支持负索引,传-1会被识别为0,会返回空字符串。 - 触发条件逻辑完全错误:
OBX_TestValue.indexOf(OBX_TestValue)永远返回0,你的判断条件是>0,所以裁剪逻辑永远不会执行。 - 修改后的值没有回写:你只是修改了局部变量
OBX_TestValue,没有把处理后的结果写回next报文对象中,修改不会生效。
修复后完整代码
/* 匹配目标:反斜杠+小数点 */ const trimStartStr = '\\.'; /* 单输入消息处理 */ const next = output.append(input[0]); // 遍历观察消息、订单、结果组 const cntObs = next.getRepeatCount("ObservationMessage"); for (var i = 0; i < cntObs; i++) { const cntOrders = next.getRepeatCount(`ObservationMessage[${i}]/Order`); for (var j = 0; j < cntOrders; j++) { const cntResults = next.getRepeatCount(`ObservationMessage[${i}]/Order[${j}]/Results`); for (var k = 0; k < cntResults; k++) { const fieldPath = `ObservationMessage[${i}]/Order[${j}]/Results[${k}]/OBX/ObservationValue`; let OBX_TestValue = next.getField(fieldPath); // 查找需要裁剪的起始位置 const trimIndex = OBX_TestValue.indexOf(trimStartStr); if (trimIndex > 0) { // 裁剪字符串,保留匹配位置之前的内容 OBX_TestValue = OBX_TestValue.substring(0, trimIndex); // 把修改后的值写回报文 next.setField(fieldPath, OBX_TestValue); } } } }
内容的提问来源于stack exchange,提问作者softgi
相关产品推荐
相关产品推荐

