我试图从逗号分隔的字符串中删除一个项目:
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来达到我想要的目标是荒谬的
我听说正则表达式可以做强大的东西,但无论我怎么努力我都无法理解
重要提示:
答案 0 :(得分:2)
对于这种替换而言, flaky 比正则表达式更少?
str = str
.split(',')
.filter(function(token) { return token !== 'unwanted' })
.join(',');
但是如果你确信正则表达式是最好的方式......
str = str.replace(/(^|,)?unwanted(,|$)?/g, function(all, leading, trailing) {
return leading && trailing ? ',' : '';
});
(感谢Logan F. Smyth。)
答案 1 :(得分:1)
由于Alex没有在他的解决方案中解决这个问题,我想在某个地方获得一个功能齐全的版本。
var unwanted = 'unwanted';
var regex = new RegExp('(^|,)' + unwanted + '(,|$)', 'g');
str = str.replace(regex, function(a, pre, suf) {
return pre && suf ? ',' : '';
});
动态构建正则表达式时唯一要注意的是,“不需要的”变量不能包含任何可以解释为正则表达式模式的内容。
正如亚历克斯所提到的,有更简单的方法来解析这个问题。除非必须,否则不要使用正则表达式。