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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:57:20