【问题标题】:JavaScript Regex Match Value + Comma and Replace with Empty or spaceJavaScript 正则表达式匹配值 + 逗号并替换为空或空格
【发布时间】:2026-02-23 20:20:05
【问题描述】:

我正在使用 javascript .replace 函数替换匹配内容/模式,但问题是它替换匹配内容但没有得到逗号关联,例如:

i have var a = 'gJDjOw0ern8,-4oCq2Vw4GQ,fjsrhmUhK60';
and b = 'gJDjOw0ern8,-4oCq2Vw4GQ';

我只想删除匹配值,就像上面的例子一样,我在替换后需要这个输出:“a = 'fjsrhmUhK60';

但我得到的是:a =' ,fjsrhmUhK60';

每次值都会替换,但关联的逗号没有替换为空或空格。

我的代码:a = a.replace(b,'');

我不想删除所有逗号,原因是每个唯一值都有逗号分隔符,

5 个唯一值有 4 个逗号:

654987987dsfdsf,5487987fsdfdsfsd,dsf8ds7987987,dsfdsfd779,sdfdsfdf

所以只想删除匹配的值以及带有空格或空的关联逗号。

【问题讨论】:

    标签: regex replace


    【解决方案1】:

    正则表达式方法的替代方法:

    // arg1 : the source string
    // arg2 : the values to remove from source string
    function stringDiff(a,b){
      var b=b.split(',');
      return a.split(',').filter(function(v){
        return b.indexOf(v)==-1;
      }).join(',');
    }
    
    var a = 'gJDjOw0ern8,-4oCq2Vw4GQ,fjsrhmUhK60';
    var b = 'gJDjOw0ern8,-4oCq2Vw4GQ';
    
    stringDiff(a,b); // return:fjsrhmUhK60
    

    【讨论】:

    • 你明白我想要什么,没有任何错误,它完美地工作,很棒的蜡笔工作。
    【解决方案2】:

    你可以使用:

    var r = a.replace(new RegExp(b + ",*"), '');
    //=> "fjsrhmUhK60"
    

    new RegExp(b + ",*") 将使用变量 b 后跟 0 个或多个逗号来构建正则表达式。

    PS:如果ab 可能包含正则表达式元字符,那么您需要转义b 中的这些字符。像这样的东西应该可以工作:

    var r = a.replace(new RegExp(b.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + ",*"), '');
    

    【讨论】:

    • 您的第一个示例运行良好,它创建了新错误,即我现在有 4 个唯一 ID:'saHJ_S-MEiY,SEUXMVt6Fik,6KtOcX8xOY8,jmMn4zzdyqc,ARTDCAGGS5k 我匹配:var b = 'saHJ_S-MEiY,ARTDCAGGS5k'; 当我匹配第一个 ID 和最后一个 ID 时,您的代码不起作用id,但是在 ids 之间我现在可以匹配并用关联逗号替换,你能检查一下这是什么现在是新问题吗?
    • 没有收到您的评论。你能澄清一下a 是什么,b 是什么,以及预期的输出是什么?
    • 错误的正则表达式。试试a='foo,bar';b='bar';a='foo,bar';b='foobar,bar'
    • @CrayonViolent:使用:a.replace(new RegExp(",*" + "\\b" + b + ",*"), '')
    • 仍然是错误的正则表达式。再次尝试a='foo,bar';b='foobar,bar'
    最近更新 更多