Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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正则表达式测试和替换_Javascript_Regex - Fatal编程技术网

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。这是一个可扩展、优雅的解决方案。谢谢很高兴它对你有用。如果我的回答对你有帮助,请考虑一下投票。您还可以对另一个答案进行投票,以给予用户共享解决方案的信任。