用\ r

时间:2018-06-13 20:09:13

标签: javascript node.js

我使用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到一个字符串?

2 个答案:

答案 0 :(得分:0)

这样做应该有效:

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);

答案 1 :(得分:0)

function replaceLfWithCr(text){    return text.replace(/ \ n / g,'\ r'); }

相关问题