我想删除逗号分隔字符串中的字符串,我想通过正则表达式执行此操作。
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[]'
关于javascript - 删除逗号分隔字符串中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27597638/