Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:替换所有出现的';a';以带';b';用正则表达式_Javascript_Regex_String_Replace - Fatal编程技术网

Javascript:替换所有出现的';a';以带';b';用正则表达式

Javascript:替换所有出现的';a';以带';b';用正则表达式,javascript,regex,string,replace,Javascript,Regex,String,Replace,我有一个类似“a 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

我有一个类似“a 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次时才起作用。如何编写正则表达式以获得正确的行为?

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

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

作为a,不会使用文本,因此“a”之后的空格将可用于下一个匹配(模式中的第一个空格是使用模式的一部分)

var regex=/a(?=)/g;
var-strs=['xayax','xaax','xaax','xaax'];
用于(str的var str){
console.log(str'=>',str.replace(regex,“b”);

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

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

  • ()a
    将匹配
    a
    之前的空格,并将其捕获到第1组中,后跟
    a
  • (?=)
    将断言在
    a
    之后是否存在空格,但不会在匹配中使用空格

您可以使用带有
g
标志的RegExp和
replace
方法。试试这个

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

a+
Regex不是只读取
a
a,而是读取每个字符,当它到达第一个字符时等待获取“a”,就像这样:“x[a]a x”它替换它并继续到下一位“a x”。它跳过下一个“a”,因为它前面没有空格,忽略该“a”。这就是为什么你会得到“x b a b x”