This can be done with a String.split('~') and then cycling the result. Here is an example of an HL7 message with one OBX segment being replaced by multiple OBX segments (one for each value in the original OBX).
// get OBX data
var value = message.getNode('OBX-5');
qie.debug('OBX-5 Value:' + value);
// save original OBX segment
var obxSegment = qie.parseHL7String(message.getNode('OBX[1]'));
// remove original OBX segment
message.removeFirstNode('OBX');
// split the data on the tilda
var individualSegments = value.split('~');
qie.debug('Segments Found:' + individualSegments.length);
// cycle individual segments and create new OBX segment
var segments = '';
for (var i = 0; i < individualSegments.length; i++) {
qie.debug('Segment ' + i + ':' + individualSegments[i]);
// set OBX sequence
obxSegment.setNode('OBX-1', i+1);
// set OBX value
obxSegment.setNode('OBX-5', individualSegments[i]);
qie.debug('OBX Segment ' + i + ':' + obxSegment.toString());
segments += obxSegment.toString() + '\n';
}
// place new segments after the PID segment of the original message
message.addChildAfter('PID', 'OBX', segments);