替换所有短划线但短划线

时间:2013-11-11 22:20:20

标签: javascript regex

我正在尝试用空格替换字符串中的所有短划线,除非短划线位于短语"not-replace"中。所以整个字符串就像

var str = "change-these-dashes-but-not-replace-that";

所以我最终可能会“改变这些破折号而不是替换那个”

但是我提出的并不是与我不想替换它的短语中的短划线相匹配。我该如何修改它?:

.match(/-(^not-replace)/gi);

2 个答案:

答案 0 :(得分:2)

str.replace(/not-replace/, 'notXXXreplace').replace(/-/, ' ').replace(/notXXXreplace/, 'not-replace');

即。首先通过将其更改为不包含短划线的内容来保护not-replace。然后替换所有破折号,并将not-replace放回不太可能的字符串。

答案 1 :(得分:2)

这是另一种方法(如果使用的话,来自ES5的map可以用jQuery中的$.map替换):

str.split('not-replace').map(function(s) {
    return s.replace(/-/g, ' ');
}).join('not-replace');  // "change these dashes but not-replace that"

甚至更短且(可能)更快的解决方案:

str.replace(/-|not-replace/g, function(s) { return s === '-' ? ' ' : s; });

最后一个将在所有浏览器中不断运行。