【问题标题】:Javascript replace part of string that have matched valueJavascript替换具有匹配值的部分字符串
【发布时间】:2017-10-04 10:45:54
【问题描述】:

我有这个字符串,我需要删除与值匹配的 AND 子句。例如:RHID = '540' AND SEQ LIKE '%44%' AND NR_DOCUMENTO LIKE '%999%'

如果值为 '%999%',我需要删除 AND NR_DOCUMENTO LIKE '%999%'。 如果值为 '%44%',我需要删除 AND SEQ LIKE '%44%'

注意:AND 查询部分是动态的,可能有不同的东西,所以它更像是找到值并向后删除到 AND

【问题讨论】:

  • 你试过我的答案了吗?这对你有用吗?

标签: javascript regex lodash


【解决方案1】:

这应该可以解决问题:

var string = "RHID = '540' AND SEQ LIKE '%44%' AND NR_DOCUMENTO LIKE '%999%'";

function replaceIt (valueSEQ, valueLIKE) {
  return string.replace(" AND SEQ LIKE '%" + valueSEQ +"%'", "")
               .replace(" AND NR_DOCUMENTO LIKE '%" + valueLIKE + "%'", "");
}

console.log( replaceIt(44, 999) );

    var string = "RHID = '540' AND SEQ LIKE '%44%' AND NR_DOCUMENTO LIKE '%999%'";
    
function replaceIt (valueSEQ, valueLIKE) {
    return string.replace(" AND SEQ LIKE '%" + valueSEQ +"%'", "")
                 .replace(" AND NR_DOCUMENTO LIKE '%" + valueLIKE + "%'", "");
}
    
console.log( replaceIt(44, 999) );

【讨论】:

    【解决方案2】:

    你可以试试这个:

    AND(?=(?:(?!AND).)*'%(?:44|999)%').*?LIKE\s+'%.*?%'
    

    Regex Demo

    const regex = /AND(?=(?:(?!AND).)*'%(?:44|999)%').*?LIKE\s+'%.*?%'/gim;
    const str = `'540' AND sEQ LIKE '%44%' AND NR_DOCUMENTO LIKE '%45%' AND bla bla bla LIKE '%999%'`;
    const result = str.replace(regex,``);
    console.log(result);

    【讨论】:

    • 但这更通用...假设我们永远不知道字符串,只知道值
    • 更像是找到值并向后删除到 AND
    • @LeonelMatiasDomingos 你的问题一开始并不清楚,但是我已经根据你的评论更新了答案
    猜你喜欢
    • 2014-03-22
    • 2023-02-16
    • 1970-01-01
    • 2014-06-26
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    相关资源
    最近更新 更多