JavaScript中如何移除字符串中从指定短语到特定字符的跨多行内容
跨多行移除@AlternateMessage代码块的正则解决方案
需求
移除字符串中所有以@AlternateMessage(开头,到对应闭合})的内容,支持跨多行场景,同时保留其他代码结构。
示例输入
const str = ` @Default("Stock ()") String Stock(int count); @DefaultMessage("Assign()") @AlternateMessage({ "({})", "Assign" }) String Assign(@PluralCount int count); @DefaultMessage("Assign()") @AlternateMessage({ "({})", "Assign", "=0", "{0} Assign definitions }) String Assign(@PluralCount int count); @DefaultMessage("Form") String Form(); `;
期望输出
const desiredResult = ` @Default("Stock ()") String Stock(int count); @DefaultMessage("Assign()") String Assign(@PluralCount int count); @DefaultMessage("Assign()") String Assign(@PluralCount int count); @DefaultMessage("Form") String Form(); `;
可行代码
使用支持跨行匹配的正则表达式,结合非贪婪匹配实现精准移除:
// 方案1:兼容旧环境,用[\s\S]匹配所有字符(含换行) const result1 = str.replaceAll(/@AlternateMessage\(\{[\s\S]*?\}\)/g, ''); // 方案2:现代环境用s模式,让`.`匹配换行 const result2 = str.replaceAll(/@AlternateMessage\(\{.*?\}\)/gs, '');
正则解析
@AlternateMessage\(\{:精准匹配起始标记,转义括号避免正则语法冲突[\s\S]*?/.*?:非贪婪匹配任意字符(含换行),确保匹配到**最近的闭合})**就停止,不会误删后续内容\}\):匹配闭合标记g:全局匹配所有符合条件的块s:仅现代环境支持,让.可以匹配换行符
内容的提问来源于stack exchange,提问作者Sherbet Head
相关产品推荐
相关产品推荐

