我正在使用 hl7parser 来解析 ADM 文件。
文档指出,要创建新的 Message 对象,应传递一个字符串:
var message = hl7parser.create("MSH|^~\&|||||20121031232617||ADT^A04|20381|P|2.3||||NE\rEVN|A04|20121031162617||01\rPID|1|16194|16194||Jones^Bob");
请注意,该字符串使用 '\r'
来分隔段(MSH、EVN、PID)。
我正在从服务器获取数据,该服务器返回以下数据。
MSH|^~\&|EPICADT|DH|LABADT|DH|201301011226||ADT^A01|HL7MSG00001|P|2.3.1|
EVN|A01|201301011223||
PID|||MRN12345^5^M11||APPLESEED^JOHN^A^III||19710101|M||C|1 CATALYZE STREET^^MADISON^WI^53005-1020|GL|(414)379-1212|(414)271-3434||S||MRN12345001^2^M10|123456789|987654^NC|
NK1|1|APPLESEED^BARBARA^J|WIFE||||||NK^NEXT OF KIN
PV1|1|I|2000^2012^01||||004777^GOOD^SIDNEY^J.|||SUR||||ADM|A0|
将 \n
替换为 \r
和 replace()
不会使解析工作,split('\n')
和 join('\r')
也不会。
我注意到在记录示例中传递的字符串和替换为 \r
后的字符串时存在差异
示例中包含字符串:
PID|1|16194|16194||Jones^BobADT^A04|20381|P|2.3||||NE
由于 \r
字符,它仅打印最后一段
用我的替换方法:
PID|||MRN12345^5^M11||APPLESEED^JOHN^A^III||19710101|M||C|1 CATALYZE STREET^^MADISON^WI^53005-1020|GL|(414)379-1PV1|1|I|2000^2012^01||||004777^GOOD^SIDNEY^J.|||SUR||||ADM|A0|
打印整个字符串,而不仅仅是最后一段。
我不确定为什么打印它们时会有差异。传递带有 \r
字符的文字字符串和“添加” \r
到字符串之间有区别吗?
最佳答案
这样做应该有效:
const lines = "A\nB\nC";
const result = lines.split("\n").join("\r");
console.log(result);
令人困惑的可能是因为它看起来好像没有,因为它看起来只是输出 ABC
。
但是,如果我们检查生成的字符串的长度:
const lines = "A\nB\nC";
const result = lines.split("\n").join("\r");
console.log(result);
console.log(result.length);
请注意,它的长度是 5 个字符,而不是 3 个。\r
就在那里。只是当它输出到大多数东西时,它基本上会被隐藏,因为 \r
本身并没有真正渲染到任何东西。
它是一个“回车符”,只有 MacOS(X 之前)使用它作为换行符。 Windows 使用 \r\n
的组合来呈现换行符,Linux(和 MacOSX)使用 \n
。
如果它想要在字符串 \r
中显式显示,那么您需要使用转义的字符串(尽管这几乎肯定不是它所期望的):
const lines = "A\nB\nC";
const result = lines.split("\n").join("\\r");
console.log(result);
console.log(result.length);
关于javascript - 将新行字符替换为\r,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50845446/