问题描述
使用一些特殊字符 |^&~
对 HL7 消息进行编码,但有时 OBR.4 中的测试名称包含 &
字符,并且根据 HL7 标准,应将其编码为 \T\
和被解析器替换为 &
。不幸的是,\T
在 RegEx 中代表一个 tab
字符,我无法制定一个可以将 Vitamin B12 \T\ Folate
转换为 Vitamin B12 & Folate
的表达式。
尝试使用
var value = msg['OBR']['OBR.4'][OBR.4.2]; // returns "Vitamin B12 \T\ Folate"
value = value.replace(/\\T\\/g,value)
但上面抛出异常 TypeError: INVALID_CHaraCTER_ERR: An invalid or illegal XML character is specified.
。
replace RegEx 表达式是否需要以不同的方式表达才能在 Mirth 中工作?
解决方法
你试过用这个代替吗?
value = value.replace(/T/g,"&");
作为已经返回的值
“维生素 B12 \T\ 叶酸”
被解释为
“维生素 B12 T 叶酸”
如果它有效,您还需要以不替换任何其他不需要的“T”的方式处理此问题。
,诀窍是确保字符串是 JavaScript
字符串而不是 Java
字符串。这是我最终创建的一个有效的函数
function _replaceHL7EncodedCharacters(value) {
value = value.toString(); // convert to Javascript string
value = value.replace(/\\T\\/g,'&');
value = value.replace(/\\R\\/g,'~');
value = value.replace(/\\E\\/g,'\\');
value = value.replace(/\\F\\/g,'|');
value = value.replace(/\\S\\/g,'^');
return value;
}