正则表达式无法匹配目标内容,请求解决指定区间替换问题
正则替换问题排查与解决方案
问题说明
待处理的HL7字符串:
MSH|^~\&|dgdgd|MSH6TOMSH4|Instrument|MSH4toMSH6|20230921104820+01:00||RSP^K11^RSP_K11|QPC0amoCwk+2uSHidYKB+Q|P|2.5.1||||||UNICODE UTF-8|||LAB-27R^ MSA|AA|1234
需求:替换K11所在字段之后、|P之前的可变内容(你描述的K11|在原始字符串中实际不存在,真实片段是K11^RSP_K11|,目标替换区间为QPC0amoCwk+2uSHidYKB+Q)。
失败原因
你尝试的正则无法匹配的核心问题:
/K11\|\w*\|P/g:\w仅匹配字母、数字、下划线,无法覆盖区间内的+符号;且原始字符串中K11后并非直接跟|,而是^RSP_K11,导致K11\|片段不存在,匹配失败。/K11\|[^|]*\|P/g和/K11\|(.*?)\|P/g:同样因K11后没有直接的|,找不到匹配片段。
可行解决方案
正则表达式
使用以下正则精准匹配目标区间:
/(K11[^|]*)\|([^|]+)\|(P)/g
替换代码
var regEx5 = /(K11[^|]*)\|([^|]+)\|(P)/g; newText1 = newText1.replace(regEx5, '$1|<IGNORE>|$3');
替换效果
原字符串中对应片段会变为:RSP^K11^RSP_K11|<IGNORE>|P
内容的提问来源于stack exchange,提问作者Endorium
相关产品推荐
相关产品推荐

