如何在不删除”的情况下替换以下^?

时间:2018-09-16 13:58:09

标签: javascript regex

我要替换以下字符串中的^

var string = 'I\'M SORRY,”^ mutters a strangely familiar voice.'

我正在这样做:

string.replace(/\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(["]|&rdquo;)\^/g, '$1</b>')

但是我删除了&rdquo;

I'M SORRY,</b> mutters a strangely familiar voice.

我要写的是:在^</b>之后用"替换&rdquo;

我也尝试这样做:

string.replace(/\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(?=(["]|&rdquo;))\^/g, '$1</b>')

但是^未被替换:

I'M SORRY,&rdquo;^ mutters a strangely familiar voice.

这样做的正确方法是什么?

5 个答案:

答案 0 :(得分:4)

您正在使用向后引用将捕获的部分保留在结果中。

您的正则表达式有2个捕获组:

/\b\^|([.,?!]|---|\.{3}\s)\^|("|&rdquo;)\^/g
      |------1-----------|   |----2----|

因此,要保留这两个捕获的部分,您需要将$1 $2添加到替换模式:

"$1$2</b>"

请参见regex demo

还请注意,["]等于"(\.|\,|\?|\!|---|\.\.\.\s)缩短为([.,?!]|---|\.{3}\s)(这样,您也可以避免溢出)。

此外,请注意,分支仅在捕获组上有所不同,它们都以\^模式结尾。因此,您可以将分支合并为一个:

/(\b|[.,?!"]|---|&rdquo;|\.{3}\s)\^/g

,然后仅替换为您拥有的"$1</b>"

答案 1 :(得分:3)

使用此:

string.replace(/\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(["]|&rdquo;)\^/g, '$2</b>');

答案 2 :(得分:1)

您可以尝试以下模式:(?<="|&rdquo;)\^

它只是向后看 (?<="|&rdquo;),以查看当前位置是"还是&rdquo;。如果是这样,则匹配^并将匹配项替换为<\b>

Demo

答案 3 :(得分:1)

我建议在整个左侧添加一个额外的捕获括号。 新的正则表达式如下所示:

/(\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(["]|&rdquo;))\^/g

签出以下内容:

var s = 'I\'M SORRY,&rdquo;^ mutters a strangely familiar voice.';

console.log('BEFORE:', s);

t = s.replace(/(\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(["]|&rdquo;))\^/g, '$1</b>');

console.log('AFTER:', t);

希望它有所帮助!

答案 4 :(得分:0)

我不确定您在regex中还要寻找什么其他元素,但是您可以只寻找所需的元素。在^"之后&rdquo;,并替换为<match found> + </b>

var str = 'I\'M SORRY,&rdquo;^ mutters a strangely familiar ^voice none "of"^ the magic.'

var res = str.replace(/("|&rdquo;)\^/g,"$1</b>");

console.log(res);