如何用JavaScript正则replace保留匹配日期、删除其余所有非匹配内容
解决方案
你原有的写法是将正则匹配到的目标日期内容替换为空,自然会删掉你想要保留的内容,调整逻辑有两种常用实现方式:
方法1:直接用match()提取匹配项(最简便)
你已经有能正确匹配目标日期的正则了,不需要硬靠replace反向删除,直接调用字符串的match()方法就能拿到所有符合规则的日期:
// 示例待处理字符串 const rawStr = `SURVEY API RESULT LANDING: [{"_id":"616392e41a03eed562de2e8a", "userId":"email@gmail.com", "date":"11 10 2021", "timeStamp":"2:26:", "formResponse":"Survey completed"}] [{"_id":"616392e41a03eed562de2e8a", "userId":"email@gmail.com", "date":"9 10 2021", "timeStamp":"2:26:", "formResponse":"Survey completed"}]`; const dateRegex = /\d{1,2} \d{2} \d{4}/g; // 拿到所有匹配的日期数组 const dateList = rawStr.match(dateRegex); // 输出结果:['11 10 2021', '9 10 2021']
如果需要把结果拼接成字符串,直接调用join()方法即可,比如dateList.join('\n')就能得到换行分隔的日期文本。
方法2:用replace()实现保留匹配项
如果一定要用replace实现需求,可以通过捕获组保留目标内容,其余内容全部替换为空:
const result = rawStr.replace(/.*?(\d{1,2} \d{2} \d{4})|.*/g, '$1\n').trim();
原理是正则会优先捕获到目标日期,替换时只保留捕获组$1的内容,其余所有未匹配到目标的内容都会被清空。
内容的提问来源于stack exchange,提问作者Constantine1984
相关产品推荐
相关产品推荐

