【问题标题】:Replace part of string if another string exists如果存在另一个字符串,则替换部分字符串
【发布时间】:2019-09-17 14:54:45
【问题描述】:

我有 3 个字符串:

str1="RHID='1' AND CD_FF='Cartão Crédito'"
str2="CD_FF='Marca/Modelo'"
str3="CD_FF"

我需要检查str1 中是否存在str3 并将CD_FF='Cartão Crédito' 替换为str2。

我知道这可以用正则表达式完成,但找不到方法。 提前致谢。

【问题讨论】:

    标签: javascript regex ecmascript-6 lodash


    【解决方案1】:

    我认为简单的字符串替换会起作用。如果未找到子字符串,则没有可替换的内容。无需先检查CD_FF:

    result = str1.replace("CD_FF='Cartão Crédito'","CD_FF='Marca/Modelo'")
    console.log(result)
    
    Output: "RHID='1' AND CD_FF='Marca/Modelo'"
    

    搜索一个不存在的字符串:

    wrong = str1.replace("mangoes",str2)
    console.log(wrong == str1) 'no change
    
    Output: True
    

    【讨论】:

    • @ruohola 怎么样?
    • 完全正确 ruohola 。如果 CD_FF 存在
    • OP 特别不希望字符串被硬编码。
    • @ruohola 他没有具体说明。我使用他提供的数据并保持简单
    【解决方案2】:

    可以使用正则表达式模式完成,使用正则后向插入所需的变量:

    let str1 = "RHID='1' AND CD_FF='Cartão Crédito'";
    const str2 = "'Marca/Modelo'";  // no need to hardcode CD_FF here
    
    const variable = "CD_FF";  // can be taken from anywhere
    
    const pattern = new RegExp(`(?<=${variable}=).*`);
    str1 = str1.replace(pattern, str2);
    
    console.log(str1);
    

    输出:

    RHID='1' AND CD_FF='Marca/Modelo'
    

    请注意,任何事情都不需要str3,而且如果从str1 中找不到CD_FF(或variable 中的任何内容),则此代码不会正确替换。

    【讨论】:

    • 常量变量 = obj.dbColumns[i]["db"]; var pattern = new RegExp(${variable}.*) obj.where_str = obj.where_str.replace(pattern, str);
    • @LeonelMatiasDomingos 现在完全可以按需要工作。问题出在你身上。您可以通过将代码复制粘贴到您的 chrome js 控制台来验证代码是否有效。
    【解决方案3】:

    您可以简单地使用includes 和replace 字符串方法的组合。

    let str1 = "RHID='1' AND CD_FF='Cartão Crédito'";
    const str2 = "CD_FF='Marca/Modelo'";
    const str3 = "CD_FF";
    
    if (str1.includes(str3)) {
        str1 = str1.replace("CD_FF='Cartão Crédito'", str2);
    }
    

    【讨论】:

    • 为什么要投反对票?不完全是您的代码。注意 str2 和 str3 的 const。这个是 es6 兼容的。
    【解决方案4】:

    这里不需要正则表达式,因为您知道要搜索和替换的所有内容的确切值。

    if (str1.includes(str3)) {
      return str1.replace("CD_FF='Cartão Crédito'", str2);
    }
    

    编辑

    根据您的其他 cmets,我认为您是说 CD_FF 的值可以是任何值?那么一个简单的 RegEx 就可以在这里工作了:

    if (str1.includes(str3)) {
      return str1.replace(/CD_FF='.*?'/, `CD_FF='${str2}'`);
    }
    

    在这种情况下,str2 将只有您要替换的部分,而不是整个 CD_FF 字符串。

    【讨论】:

    • 谢谢。但我需要用另一个变量的值替换“Cartão Crédito”
    • 您说“将 CD_FF='Cartão Crédito' 替换为 str2。”这就是这样做的。如果您想用 str2 中的值以外的值替换它,请说明您真正想用什么替换它,我们会从那里为您提供帮助。
    猜你喜欢
    • 2021-07-11
    • 1970-01-01
    • 2022-12-28
    • 1970-01-01
    • 2011-08-10
    • 2011-03-25
    相关资源
    最近更新 更多