使用Regex从逗号分隔列表中删除值

时间:2015-06-06 23:21:30

标签: javascript regex

我在使用正则表达式从逗号分隔列表中删除值时遇到了困难;值可以在列表中的任何位置,我目前的解决方案似乎不起作用:

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

2 个答案:

答案 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)

有些人喜欢使用splitjoin

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)