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

时间:2014-12-22 06:36:46

标签: javascript regex

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

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

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

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

但如果它是最后一项,它会留下一个尾随逗号。将它添加到前面会有同样的问题,如果删除第一个项目并添加到两边将删除从中间项目删除逗号。

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

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

有人可以用一种更优雅的方式在一个regExp中处理这个问题。感谢

编辑:

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

4 个答案:

答案 0 :(得分:3)

您需要使用交替运算符|

您要替换的字符串位于中间

> 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字符串。

OR

如果您要删除"bbb",如果列表只有"bbb"

,则可以使用以下正则表达式
> var str = 'values["bbb"]';
undefined
> var replaceRegexp = new RegExp('"'+ strToReplace +'",|,?"'+ strToReplace +'"', 'g');
undefined
> str.replace(replaceRegexp,'');
'values[]'

答案 1 :(得分:2)

"bbb",|,?"bbb"

你可以尝试这样的东西来完成所有条件。参见演示。

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

答案 2 :(得分:1)

我认为这是最优秀的。

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>

答案 3 :(得分:0)

这是我的javascript代码中使用的正则表达式,它适用于我,因为找到字符串是&#34; findme&#34;:

/^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, "");