Javascript:用带有正则表达式的'b'替换字符串中'a'的所有出现

Joh*_*ohn 3 javascript regex string replace

我有一个像'abbba'这样的字符串,并希望替换该字符串中的每个'b',该字符串在具有不同字符的字符之前和之后具有空格.我怎么能用正则表达式做到这一点?我的想法是这样的:

'x a y a x'.replace(new RegExp(' a ', 'g'), ' b '); // is: x b y b x, should: x b y b x (correct)
'x a a a x'.replace(new RegExp(' a ', 'g'), ' b '); // is: x b a b x, should: x b b b x (wrong)
'x aa x'.replace(new RegExp(' a ', 'g'), ' b '); // is: x aa x, should: x aa x (correct)
Run Code Online (Sandbox Code Playgroud)

但是,只有在角色的另一个出现旁边出现不超过1个字符时,该正则表达式才有效.我怎么能写正则表达式以获得正确的行为?

Wik*_*żew 5

在"a"之后使用前瞻来匹配重叠的子串:

/ a(?= )/g
Run Code Online (Sandbox Code Playgroud)

或者,要匹配任何空格,请用空格替换空格\s.

作为零宽度断言前瞻不消耗文本,因此"a"之后的空间将可用于下一个匹配(模式中的第一个空格是消费模式的一部分).

请参阅正则表达式演示

var regex = / a(?= )/g;
var strs = ['x a y a x', 'x a a a x', 'x aa x'];
for (var str of strs) {
 console.log(str,' => ', str.replace(regex, " b"));
}
Run Code Online (Sandbox Code Playgroud)