我想将-所包含的所有字符串替换为~所包含的字符串,但是如果此字符串再次被*所包含,则不会。

例如,这个字符串...

The -quick- *brown -f-ox* jumps.

...应该变成...
The ~quick~ *brown -f-ox* jumps.

我们看到-仅在*<here>*不在范围内时才被替换。

我现在的javascript-regex(不管它是否由*括起来),都不会:
var message = source.replace(/-(.[^-]+?)-/g, "~$1~");

编辑:请注意,可能是*的数量为奇数的情况。

最佳答案

使用正则表达式是一件棘手的事情。我想我要做的是这样的:

var msg = source.replace(/(-[^-]+-|\*[^*]+\*)/g, function(_, grp) {
  return grp[0] === '-' ? grp.replace(/^-(.*)-$/, "~$1~") : grp;
});

jsFiddle Demo

该命令查找-*组,并且仅对虚线组执行替换。通常,使用正则表达式“嵌套”语法是有挑战性的(或不可能的)。 (当然,作为对问题注释的评论,在某些特殊情况下-悬空的元字符-也会使情况复杂化。)

10-08 09:34
查看更多