删除逗号分隔字符串内的字符串

Removing a string inside a comma delimited string

本文关键字:字符串 分隔 删除      更新时间:2023-09-26

我想删除逗号分隔字符串内的字符串,我想通过正则表达式执行此操作。

   var strToReplace = 'bbb';
   var str = 'values["aaa","bbb","ccc"]';

我遇到的问题是逗号。仅替换所需的字符串会留下逗号,因此我添加了删除以下逗号(如果存在(的添加。

   var replaceRegexp = new RegExp('"'+ strToReplace +'",?');
   str = str.replace(replaceRegexp,'');

但是,如果它是最后一项,它会留下尾随逗号。如果删除第一项并将其添加到两侧,则将其添加到前面将产生相同的问题,从中间项目中删除逗号。

我刚刚添加了另一个替换字符串以在删除项目后删除尾随字符串。

   str = str.replace('",]','"]');

有人可以指出我一种更优雅的方式来在一个正则表达式中处理这个问题。谢谢

编辑:

   var str = 'values["aaa","bbb","ccc"]';
   var str = 'values["bbb"]';
   var str = 'values["aaa","bbb","ccc","bbb"]';

您需要使用交替运算符|

要替换的字符串位于中间

> var strToReplace = 'bbb';
undefined
> var str = 'values["aaa","bbb","ccc"]';
undefined
> var replaceRegexp = new RegExp('"'+ strToReplace +'",|,"'+ strToReplace +'"', 'g');
undefined
> str.replace(replaceRegexp,'');
'values["aaa","ccc"]'

要替换的字符串位于最后一个

> var str = 'values["aaa","ccc","bbb"]';
undefined
> var strToReplace = 'bbb';
undefined
> var replaceRegexp = new RegExp('"'+ strToReplace +'",|,"'+ strToReplace +'"', 'g');
undefined
> str.replace(replaceRegexp,'');
'values["aaa","ccc"]'

要替换的字符串位于第一个

> var strToReplace = 'bbb';
undefined
> var str = 'values["bbb","aaa","ccc"]';
undefined
> var replaceRegexp = new RegExp('"'+ strToReplace +'",|,"'+ strToReplace +'"', 'g');
undefined
> str.replace(replaceRegexp,'');
'values["aaa","ccc"]'

|称为交替或逻辑或运算符。但是逻辑 OR 运算符是必须的。

首先,正则表达式引擎会尝试使用|符号之前的模式匹配所有字符。之后,它尝试使用 | 运算符旁边的模式匹配剩余字符(在本例中(。

因此,上述正则表达式"bbb",的第一部分匹配所有bbb,字符串,但它无法匹配最后bbb,因为它没有以下逗号。然后下一个模式",bbb"进入攻击并匹配最后一个,bbb字符串。

如果您想

删除"bbb",如果列表只有"bbb",则可以使用以下正则表达式

> var str = 'values["bbb"]';
undefined
> var replaceRegexp = new RegExp('"'+ strToReplace +'",|,?"'+ strToReplace +'"', 'g');
undefined
> str.replace(replaceRegexp,'');
'values[]'
"bbb",|,?"bbb"

您可以尝试这样的东西,它将满足所有条件。请参阅演示。

https://regex101.com/r/vN3sH3/40

在我看来这是最佳的。

var strToReplace = 'bbb',
  re = new RegExp('(,?)"' + strToReplace + '"(,?)', 'g'),
  str = 'values["bbb","aaa","ccc","bbb","ccc","aaa","bbb"]';
str = str.replace(re, function(match, sub1, sub2) {
    if (!sub1.length || !sub2.length) {
        return '';
    } else {
        return ',';
    }
});
document.getElementById('result').textContent = str;
console.log(str);
<div id="result"></div>

这是我的javascript代码中使用的正则表达式,它对我有用,因为查找字符串是"findme":

/^findme,|,findme$|,findme(?=,)/

还有这样的代码片段:

var find = form1.find.value;
var source = form1.source.value;
var regex = new RegExp("^"+find+",|,"+find+"$|,"+find+"(?=,)");
var result = source.replace(regex, "");