如何使用正则表达式移除已知起止模式、中间内容动态的子串
正则匹配移除时间前缀解决方案
原正则错误说明
你之前的写法存在三个核心问题:
^和$匹配的是整个字符串的起止位置,若目标子串不是单独占据整行/整个字符串,会直接匹配失败On*实际匹配规则是字母O后接任意数量的字母n,而非你预期的On开头后接任意内容- 没有覆盖中间空格、月份、日期、时间等动态内容的匹配规则
正确正则写法
符合需求的通用正则表达式如下:/On\s+[A-Z][a-z]{2}\s+\d{1,2},\s+\d{4}\s+\d{1,2}:\d{2}\s+[AP]M,/g
各部分匹配规则:
On:匹配目标子串固定开头\s+:匹配1个及以上空格,兼容多空格的异常格式[A-Z][a-z]{2}:匹配Jan、Feb等3个字符的月份缩写\d{1,2}:匹配1-2位的日期数字\d{4}:匹配4位的年份数字\d{1,2}:\d{2}:匹配小时:分钟格式的时间[AP]M:匹配AM/PM标识- 末尾的
,匹配子串结尾的逗号 - 修饰符
g表示全局匹配,替换所有符合规则的子串
如果目标子串全部出现在每行开头,可以增加m多行修饰符,写法调整为:/^On\s+[A-Z][a-z]{2}\s+\d{1,2},\s+\d{4}\s+\d{1,2}:\d{2}\s+[AP]M,/gm
使用示例
const rawStr = "On Feb 4, 2018 11:00 PM,正文第一段On Mar 15, 2019 8:20 AM,正文第二段"; const cleanedStr = rawStr.replaceAll(/On\s+[A-Z][a-z]{2}\s+\d{1,2},\s+\d{4}\s+\d{1,2}:\d{2}\s+[AP]M,/g, ''); // 输出结果:正文第一段正文第二段
偷懒截取实现(仅适用于子串固定在开头、长度固定场景)
如果确认所有目标子串长度固定,比如示例子串长度为22位,可直接截取:
const cleanedStr = rawStr.slice(22);
内容的提问来源于stack exchange,提问作者Jacob David C. Cunningham
相关产品推荐
相关产品推荐

