我想将-
所包含的所有字符串替换为~
所包含的字符串,但是如果此字符串再次被*
所包含,则不会。
例如,这个字符串...
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
该命令查找
-
或*
组,并且仅对虚线组执行替换。通常,使用正则表达式“嵌套”语法是有挑战性的(或不可能的)。 (当然,作为对问题注释的评论,在某些特殊情况下-悬空的元字符-也会使情况复杂化。)