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

时间:2016-10-19 11:56:38

标签: javascript regex string replace

我有一个像'a b b b a'这样的字符串,并希望替换该字符串中的每个'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)

但是,如果角色的另一个出现位置旁边出现的角色不超过1次,则该正则表达式才有效。我怎么能写正则表达式以获得正确的行为?

3 个答案:

答案 0 :(得分:5)

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

df['quantile'] = 0.0

for q in [0.25, 0.5, 0.75]:
    df.loc[df['value'] >= df['value'].quantile(q), 'quantile'] = q

或者,要匹配任何空格,请将空格替换为/ a(?= )/g

作为lookaheadzero-width assertion不会消耗文本,因此“a”之后的空格将可用于下一个匹配(模式中的第一个空格是消耗的一部分图案)。

请参阅regex demo

\s

答案 1 :(得分:3)

由于您的匹配重叠,您可以使用零宽度断言,即基于正则表达式的正向前瞻:

str = str.replace(/( )a(?= )/g, "\1b");

RegEx Demo

  • ( )a将匹配a之前的空格,并在#1组中捕获,然后a
  • (?= )会在a之后声明存在空格,但在比赛中不会消耗它。

答案 2 :(得分:0)

您可以将带有g标记的RegExp与replace方法一起使用。试试这个

var mystring = "this is a a a a a a test"
mystring.replace(/ a /g , "b");