Javascript JS中的lookbehind支持是什么?如何更换?
我有一个字符串,我想替换没有跟在任何其他I后面的每个“I”,并将其替换为“z”。我知道有消极的向前看和向后看 结果应该是:Javascript JS中的lookbehind支持是什么?如何更换?,javascript,regex,negative-lookahead,negative-lookbehind,Javascript,Regex,Negative Lookahead,Negative Lookbehind,我有一个字符串,我想替换没有跟在任何其他I后面的每个“I”,并将其替换为“z”。我知道有消极的向前看和向后看 结果应该是: i => z iki => zkz iiki => iikz ii => ii iii => iii 我试着用这个: /(?<!i)i(?!i)/gi 工作正常,但与此中的第二个“i”匹配:“ii” 还有别的办法吗 JS中的lookbehind支持是什么?JavaScript正则表达式中的lookbehind非常新。在写这篇文章时,它
i => z
iki => zkz
iiki => iikz
ii => ii
iii => iii
我试着用这个:
/(?<!i)i(?!i)/gi
工作正常,但与此中的第二个“i”匹配:“ii”
还有别的办法吗
JS中的lookbehind支持是什么?JavaScript正则表达式中的lookbehind非常新。在写这篇文章时,它是(铬,铬,勇敢…),而不是由其他引擎 这里有关于如何在没有后顾之忧的情况下工作,例如 Steven Levithan还展示了解决该功能缺失的方法 我想替换每个没有跟随/跟随任何其他I的“I”,并将其替换为“z”` 使用占位符和一个捕获组,不需要向前看或向后看就很容易做到这一点。您可以捕获
i
之后的内容:
const rex = /i(i+|.|$)/g;
…然后,如果捕获的不是i
或一系列i
s,则有条件地替换它:
const result = input.replace(rex, (m, c) => {
return c[0] === "i" ? m : "z" + c;
});
实例:
const rex=/i(i+|.|$)/g;
功能测试(输入、预期){
常量结果=输入。替换(rex,(m,c)=>{
返回c[0]=“i”?m:“z”+c;
});
log(输入、结果、结果===预期?“良好”:“错误”);
}
测试(“i”、“z”);
测试(“iki”、“zkz”);
测试(“iiki”、“iikz”);
测试(“ii”、“ii”);
测试(“iii”、“iii”)代码>在您的情况下,您实际上不需要回头看:
'iiki'.replace(/i+/g, (m0) => m0.length > 1 ? m0 : 'z')
您可以将函数用作替换部分,并测试匹配字符串的长度
以下是您的所有测试用例:
功能测试(输入,预期){
常量结果=输入。替换(/i+/g,(m0)=>m0.length>1?m0:'z');
log(输入+“=>”+结果+“/”+(结果===预期?“良好”:“错误”);
}
测试('i','z');
测试('iki','zkz');
测试(“iiki”、“iikz”);
测试(‘ii’、‘ii’);
测试(“iii”、“iii”)代码>在这种情况下,您可以使用一种黑客。正在根据匹配更改偏移值
让arr=['i','iki','iiki','ii','iii','ki']
arr.forEach(e=>{
让value=e.replace(/i(?!i)/g,函数(匹配,偏移,字符串){
返回偏移量>0&&string[offset-1]=='i'?'i':'z'
})
console.log(值)
})
'iiki'.replace(/i+/g, (m0) => m0.length > 1 ? m0 : 'z')