Javascript:替换所有出现的';a';以带';b';用正则表达式
我有一个类似“a b 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
'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
之前的空格,并将其捕获到第1组中,后跟a
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”