Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 JS中的lookbehind支持是什么?如何更换?_Javascript_Regex_Negative Lookahead_Negative Lookbehind - Fatal编程技术网

Javascript JS中的lookbehind支持是什么?如何更换?

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后面的每个“I”,并将其替换为“z”。我知道有消极的向前看和向后看

结果应该是:

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')