如何使用正则表达式按指定单词将字符串分割为字符串数组?
按指定单词分割字符串的正则解决方案
问题说明
需要将以下用药说明字符串,按指定关键字(Tab、Inj)分割为字符串数组,同时合并属于同一条目的多行内容:
原始字符串:
Tab. Vilda 50Mg Daily, 30 Mins Before Breakfast T0 Mins Before Breakfast Once Daily At 8 P.M. Tab Atchol 20. Once Daily At 10 P.M. -Tab Aktiv D 60K Units Once In 15 Days With Milk At Bed Time -Inj Denosumab 60Mg Stat(26/04/23) -Tab. Pth 30Mg One Tablet Every Alternate Daily At 10Pm
期望输出数组:
[ 'Tab. Vilda 50Mg Daily, 30 Mins Before Breakfast T0 Mins Before Breakfast Once Daily At 8 P.M.', 'Tab Atchol 20. Once Daily At 10 P.M.', 'Tab Aktiv D 60K Units Once In 15 Days With Milk At Bed Time', 'Inj Denosumab 60Mg Stat(26/04/23)', 'Tab. Pth 30Mg One Tablet Every Alternate Daily At 10Pm' ]
正则实现方案
核心思路是:匹配所有以Tab/Inj开头(前面可能带连字符-,且位于行首或换行后)的内容片段,直到遇到下一个分割关键字或字符串结尾。
以下是JavaScript的实现代码:
const rawText = `Tab. Vilda 50Mg Daily, 30 Mins Before Breakfast T0 Mins Before Breakfast Once Daily At 8 P.M. Tab Atchol 20. Once Daily At 10 P.M. -Tab Aktiv D 60K Units Once In 15 Days With Milk At Bed Time -Inj Denosumab 60Mg Stat(26/04/23) -Tab. Pth 30Mg One Tablet Every Alternate Daily At 10Pm`; // 正则表达式:匹配以Tab/Inj开头的条目片段 const splitRegex = /(?:^|\n)-?(Tab|Inj).*?(?=(?:\n)-?(Tab|Inj)|$)/gs; // 提取并处理匹配结果 const result = Array.from(rawText.match(splitRegex), item => { // 移除开头的换行和可选连字符,将内部换行转为空格,清理首尾空格 return item.replace(/^\n-?/, '').replace(/\n/g, ' ').trim(); }); console.log(result);
正则解释
(?:^|\n):匹配字符串起始位置或换行符,用于定位条目的起始边界(非捕获组,不占用匹配结果)-?:匹配可选的前置连字符-(部分条目带该符号)(Tab|Inj):指定要分割的关键字,可扩展为(Tab|Inj|OtherKey)添加更多分割词.*?:非贪婪匹配任意字符,避免过度匹配到下一个条目(?=(?:\n)-?(Tab|Inj)|$):正向预查,匹配下一个条目起始位置或字符串结尾,确保每个条目截止到下一个分割关键字前
扩展说明
如果需要添加更多分割关键字(如Cap、Syr),只需修改正则中的关键字组,例如:
const splitRegex = /(?:^|\n)-?(Tab|Inj|Cap|Syr).*?(?=(?:\n)-?(Tab|Inj|Cap|Syr)|$)/gs;
内容的提问来源于stack exchange,提问作者Naman Pandita
相关产品推荐
相关产品推荐

