如何用更优雅的正则表达式实现字符串中AM/PM的全局拆分与格式化?
更高效的AM/PM字符串拆分实现
需求与现有实现
需要将字符串内所有单词中的AM、PM拆分并添加逗号,同时把原逗号分隔转为换行,输出指定格式。现有实现代码如下:
let str = "MondayAM,MondayPM,TuesdayAM,WednesdayAM,ThursdayAM,ThursdayPM"; str = str.replace(/,/g,'\n').replace(/AM/g,", AM").replace(/PM/g,", PM") console.log(str); document.write("<pre>"+str+"</pre>")
优化后的实现方案
可以通过单次正则匹配替换完成所有操作,代码更简洁高效:
const str = "MondayAM,MondayPM,TuesdayAM,WednesdayAM,ThursdayAM,ThursdayPM"; const formattedStr = str.replace(/([A-Za-z]+)(AM|PM),?/g, "$1, $2\n").trim(); console.log(formattedStr); document.write(`<pre>${formattedStr}</pre>`);
优化点说明
- 减少字符串操作次数:原代码执行3次
replace,优化后仅1次,性能更优 - 正则逻辑精准:
([A-Za-z]+)捕获日期单词,(AM|PM)匹配时段,,?处理末尾可选的逗号,避免多余换行 - 输出格式更整洁:通过
trim()移除最后一行的多余换行符,完全符合目标格式要求
内容的提问来源于stack exchange,提问作者David Garcia
相关产品推荐
相关产品推荐

