我想删除逗号分隔字符串中的字符串,我想通过正则表达式执行此操作。
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"]';
答案 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)
答案 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, "");