正则表达式:匹配单词(但在OR之前删除逗号)

时间:2011-12-20 05:03:03

标签: javascript regex

我试图从逗号分隔的字符串中删除一个项目:

var str="this,is,unwanted,a,test";

  • 如果我做一个简单的str.replace('unwanted','');我最终得到2个逗号
  • 如果我做的更复杂str.replace('unwanted','').replace(',,',''); 它可能会起作用

但问题出现在str是这样的时候:

var str="unwanted,this,is,a,test"; // or "...,unwanted"

但是,我可以在[0或str.length] ==逗号'中执行'if char,然后将其删除

但我真的认为这不是可行的方法,我需要做2次替换和2次ifs来达到我想要的目标是荒谬的

我听说正则表达式可以做强大的东西,但无论我怎么努力我都无法理解

重要提示:

  • 它应该在OR之前匹配(不是两者),否则我们将结束 “这是一个,,,测试”
  • 逗号之间没有空格

2 个答案:

答案 0 :(得分:2)

对于这种替换而言, flaky 比正则表达式更少?

str = str
     .split(',')
     .filter(function(token) { return token !== 'unwanted' })
     .join(',');

jsFiddle

但是如果你确信正则表达式是最好的方式......

str = str.replace(/(^|,)?unwanted(,|$)?/g, function(all, leading, trailing) {
    return leading && trailing ? ',' : '';
});

(感谢Logan F. Smyth。)

jsFiddle

答案 1 :(得分:1)

由于Alex没有在他的解决方案中解决这个问题,我想在某个地方获得一个功能齐全的版本。

var unwanted = 'unwanted';
var regex = new RegExp('(^|,)' + unwanted + '(,|$)', 'g');
str = str.replace(regex, function(a, pre, suf) {
  return pre && suf ? ',' : '';
});

动态构建正则表达式时唯一要注意的是,“不需要的”变量不能包含任何可以解释为正则表达式模式的内容。

正如亚历克斯所提到的,有更简单的方法来解析这个问题。除非必须,否则不要使用正则表达式。