JavaScript正则表达式测试和替换
我需要消毒一些炭。我有一个有效的解决方案,但我想知道是否有更好的解决方案,可能更快或更好,或者我是否应该以不同的方式来处理这个问题JavaScript正则表达式测试和替换,javascript,regex,Javascript,Regex,我需要消毒一些炭。我有一个有效的解决方案,但我想知道是否有更好的解决方案,可能更快或更好,或者我是否应该以不同的方式来处理这个问题 function escapeStr(_str){ if (/\"|\'|\%/g.test(_str)) { _str = _str.replace(/"/g, "%22"); _str = _str.replace(/'/g, "%27"); _str = _str.replace(/%/g, "%25")
function escapeStr(_str){
if (/\"|\'|\%/g.test(_str)) {
_str = _str.replace(/"/g, "%22");
_str = _str.replace(/'/g, "%27");
_str = _str.replace(/%/g, "%25");
}
return _str;
}
反之亦然:
function unescapeStr(_str){
if (/\%22|\%27|\%25/g.test(_str)) {
_str = _str.replace(/\%22/g, '"');
_str = _str.replace(/\%27/g, "'");
_str = _str.replace(/\%25/g, "%");
}
return _str;
}
在链中使用
String.prototype.replace()
函数就足够了。此外,无需转义%
字符:
函数escapeStr(_str){
_str=_str.replace(/%/g,“%25”)。replace(/”/g,“%22”)。replace(/'/g,“%27”);
返回_str;
}
函数unescapeStr(_str){
_str=_str.replace(/%22/g,“”)。replace(/%27/g,“”)。replace(/%25/g,“%”);
返回_str;
}
log(escapeStr('sdfsdf%%%”“\”);
log(unescapeStr('sdfsdf%25%25%22%22%22%22%27')
您可以将这些字符与单个字符类regex/[''“%]/g
匹配,并在回调中用相应的替换替换每个匹配项:
函数myQuoteStr(_str){
返回_str.replace(/[“%%]/g,函数($0){
返回$0==“'”?%22:$0==“'”?%27:“%25”;
});
}
console.log(myQuoteStr(“\”-“-%”-”);
函数myunquoteestr(_str){
返回_str.replace(/%2[257](?!\d)/g,函数($0){
返回$0==“%22”?“:$0===“%27”?“:“%”;
});
}
console.log(myUnQuoteStr(“%22-%27-%25”);
如果有人认为如果找到其中一个字符,您将对字符串进行四次检查,那么这将是一个很好的解决方案。这感觉只是一种意见,但您可以使用encodeURIComponent
和decodeURIComponent
进行”
和%
一次性完成。然后可以使用正则表达式替换“
字符。真的不需要测试。只要运行一个替换,如果找不到它,它就不会替换任何东西。@abl谢谢!我会加入并尝试一下!我喜欢这个解决方案,因为它提醒我如何使用lookahead和使用regex return。这是一个可扩展、优雅的解决方案。谢谢很高兴它对你有用。如果我的回答对你有帮助,请考虑一下投票。您还可以对另一个答案进行投票,以给予用户共享解决方案的信任。