You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用正则表达式按指定单词将字符串分割为字符串数组?

按指定单词分割字符串的正则解决方案

问题说明

需要将以下用药说明字符串,按指定关键字(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 07:11:09