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

如何通过正则表达式或其他方式更新String.raw代码块中的值?

问题解决:动态更新textarea中String.raw生成的内容

你的核心需求是通过按钮交互更新ENV_NAME_VARIABLE的值,并同步到textarea中。首先修正原代码里的语法错误:"name": "${ENV_NAME_VARIABLE}""多了一个多余的双引号,应改为"name": "${ENV_NAME_VARIABLE}"。

下面提供两种可行的解决方案:


方案一:维护模板重新生成(推荐)

这种方式不需要解析textarea的现有内容,而是保留原始字符串模板,每次更新变量后重新生成完整的ENV内容再替换到textarea中,逻辑清晰且不易出错。

完整代码示例:

<script>
    let ENV_NAME_VARIABLE = 'TESTING NAME';

    // 抽离模板函数,方便重复生成内容
    function generateEnvContent() {
        return String.raw`
        {
            "id": "15bbb91c-b9d9-4238-8eb5-01c991d613ba",
            "name": "${ENV_NAME_VARIABLE}"
        }
        `;
    }

    // 初始化渲染textarea
    document.write(`
    <textarea id="ENV" style="width: 80%; height: 100px">${generateEnvContent()}</textarea>
    `);

    function updateName() { 
        // 更新变量值
        ENV_NAME_VARIABLE = 'ABC';
        // 重新生成内容并替换到textarea
        document.getElementById('ENV').value = generateEnvContent();
    }
</script>

<p>
<button onclick="updateName();">Change value of name to ABC</button>
</p>

说明:

  • 将生成ENV内容的逻辑封装成函数,每次更新时直接调用,确保内容与变量值完全同步。
  • 避免了从textarea逆向解析变量值的复杂操作,降低格式变化导致的出错概率。

方案二:解析textarea内容替换(不推荐)

如果必须从textarea现有内容中提取当前name值再替换,可以用正则表达式匹配目标内容。但这种方式依赖内容格式的稳定性,若格式(如空格、引号位置)变化则会失效。

代码示例:

<script>
    let ENV_NAME_VARIABLE = 'TESTING NAME';

    var ENV = String.raw`
    {
        "id": "15bbb91c-b9d9-4238-8eb5-01c991d613ba",
        "name": "${ENV_NAME_VARIABLE}"
    }
    `;

    document.write(`
    <textarea id="ENV" style="width: 80%; height: 100px">${ENV}</textarea>
    `);

    function updateName() { 
        const textarea = document.getElementById('ENV');
        // 用正则匹配name字段的现有值并替换
        const updatedContent = textarea.value.replace(/"name": "(.*?)"/, '"name": "ABC"');
        // 更新textarea内容
        textarea.value = updatedContent;
        // 同步更新变量(可选,确保后续使用时值一致)
        ENV_NAME_VARIABLE = 'ABC';
    }
</script>

<p>
<button onclick="updateName();">Change value of name to ABC</button>
</p>

说明:

  • 正则表达式/"name": "(.*?)"/用于匹配"name": "xxx"格式的内容,(.*?)是非贪婪匹配,确保只捕获当前name的取值。
  • 替换后同步更新ENV_NAME_VARIABLE,避免后续使用变量时出现值不一致的问题。

内容的提问来源于stack exchange,提问作者Khom Nazid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:43:13