我在使用正则表达式从逗号分隔列表中删除值时遇到了困难;值可以在列表中的任何位置,我目前的解决方案似乎不起作用:
var val = "455";
sList = sList
.replace(new RegExp("\b"+val,""))
.replace(new RegExp("\b"+val+",(.+)"),"$1")
.replace(new RegExp("\b(.+),"+val),"$1")
.replace(new RegExp("(.*),"+val+",(.+)"),"$1,$2");
列表可能是:
var sList ="455" || "val1,val2,455,val4,valn" || "455,val2,val3,valn" || "val1,val2,val3,455";
有人可以提出建议吗?
非常感谢,Alex
答案 0 :(得分:2)
正如JNYRanger建议的那样,用逗号分割字符串更简单,删除值然后用逗号连接结果数组:
var str= "val1,val2,455,val4,valn";
str = str.split(',').filter(function (i) { return i !== '455' }).join(',');
要使用正则表达式,您可以简单地列出所有这些可能性:
/^455(?:,|$)|,455(?=,|$)/
示例:
var re = new RegExp("^" + val + "(?:,|$)|," + val + "(?=,|$)");
str = str.replace(re, '');
答案 1 :(得分:1)
有些人喜欢使用split
和join
:
var keep = [];
"val1,val2,455,val4,valn".split(",").forEach(function(val) {
if (val !== "455") keep.push(val);
});
keep.join(",");
将产生:
"val1,val2,val4,valn"
其他人(比如我)更愿意使用正则表达式match
,而是将split(",")
替换为match(/[^,]+/g)
。