如果它被一个字符包围,请不要替换正则表达式

poi*_*oae 9 javascript regex jquery

我想将所有被包围的-字符串替换为括在其中的字符串~,但是如果该字符串再次被括起来则不能*.

举个例子,这个字符串......

The -quick- *brown -f-ox* jumps.
Run Code Online (Sandbox Code Playgroud)

......应该成为......

The ~quick~ *brown -f-ox* jumps.
Run Code Online (Sandbox Code Playgroud)

我们看到-只有在不在内的情况下才会被替换*<here>*.

我现在的javascript-regex(不管它是否被括起来都不关心*):

var message = source.replace(/-(.[^-]+?)-/g, "~$1~");
Run Code Online (Sandbox Code Playgroud)

编辑:请注意,可能存在奇数个*s.

Poi*_*nty 2

对于正则表达式来说这是一件棘手的事情。我想我会做这样的事情:

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

jsFiddle 演示

它会查找或 -组,并且*仅对虚线组执行替换。一般来说,“嵌套”语法对于正则表达式来说是具有挑战性的(或不可能的)。(当然,作为对问题注释的评论,有一些特殊情况 - 悬空元字符 - 也会使问题变得复杂。)