我要替换以下字符串中的^
:
var string = 'I\'M SORRY,”^ mutters a strangely familiar voice.'
我正在这样做:
string.replace(/\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(["]|”)\^/g, '$1</b>')
但是我删除了”
:
I'M SORRY,</b> mutters a strangely familiar voice.
我要写的是:在^
或</b>
之后用"
替换”
。
我也尝试这样做:
string.replace(/\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(?=(["]|”))\^/g, '$1</b>')
但是^
未被替换:
I'M SORRY,”^ mutters a strangely familiar voice.
这样做的正确方法是什么?
答案 0 :(得分:4)
您正在使用向后引用将捕获的部分保留在结果中。
您的正则表达式有2个捕获组:
/\b\^|([.,?!]|---|\.{3}\s)\^|("|”)\^/g
|------1-----------| |----2----|
因此,要保留这两个捕获的部分,您需要将$1
和 $2
添加到替换模式:
"$1$2</b>"
请参见regex demo
还请注意,["]
等于"
,(\.|\,|\?|\!|---|\.\.\.\s)
缩短为([.,?!]|---|\.{3}\s)
(这样,您也可以避免溢出)。
此外,请注意,分支仅在捕获组上有所不同,它们都以\^
模式结尾。因此,您可以将分支合并为一个:
/(\b|[.,?!"]|---|”|\.{3}\s)\^/g
,然后仅替换为您拥有的"$1</b>"
。
答案 1 :(得分:3)
使用此:
string.replace(/\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(["]|”)\^/g, '$2</b>');
答案 2 :(得分:1)
答案 3 :(得分:1)
我建议在整个左侧添加一个额外的捕获括号。 新的正则表达式如下所示:
/(\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(["]|”))\^/g
签出以下内容:
var s = 'I\'M SORRY,”^ mutters a strangely familiar voice.';
console.log('BEFORE:', s);
t = s.replace(/(\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(["]|”))\^/g, '$1</b>');
console.log('AFTER:', t);
希望它有所帮助!
答案 4 :(得分:0)
我不确定您在regex
中还要寻找什么其他元素,但是您可以只寻找所需的元素。在^
或"
之后”
,并替换为<match found> + </b>
var str = 'I\'M SORRY,”^ mutters a strangely familiar ^voice none "of"^ the magic.'
var res = str.replace(/("|”)\^/g,"$1</b>");
console.log(res);