Javscript更有效率的字符串替换

本文介绍了一种更高效的HTML特殊字符替换方法,通过一次replace操作即可完成所有目标字符的替换,对比传统方法显著提升了处理速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 感谢Clear为我们提供了这个效率更高的字符串替换函数。这是一个很普通的HTML特殊字符替换函数,就是将&、"、'、<、> 等函数替换成&、"、'、<、>。如果用以往的方法就是多次使用replace 函数,每替换一次就要用一次。这样做会很没有效率,而Clear给我们带来的方法只用replace一次,就可以替换整个字符串里面的匹配字符为不同的结果,非常有效率的。

测试了一下感觉字符数目越多,效率越高。

一下是测试结果:

测试方法为,对一个2048字节长的字符串分别执行两个函数100次,取其执行时间。下面为10次测试的结果。toTXT_1 为通常的作法,toTXT_2 为Clear的方法。

toTXT_1(ms)toTXT_2(ms)toTXT_1/toTXT_2
1609120475%
2250154769%
1672131379%
1813125069%
1844121966%
2063142169%
2031117258%
1797136076%
2015128164%
1860150081%

测试程序在这里:

< html >
< head >
< script >

function toTXT_1(str){
    str 
= str.replace(/&/g, "& amp;");
    str 
= str.replace(/>/g, "& gt;");
    str 
= str.replace(/</g, "& lt;");
    str 
= str.replace(/"/g, "& quot;");
    str = str.replace(/'/g, 
"& #39;");
    return str;
}

function toTXT_2(str){
    var RexStr = /<|>|"|'|&/g
    str = str.replace(RexStr,
        function(MatchStr){
            switch(MatchStr){
                case 
"<":
                    return 
"& lt;";
                    break;
                case 
">":
                    return 
"& gt;";
                    break;
                case 
""":
                    
return "& quot;";
                    
break;
                
case "'":
                    
return "& #39;";
                    
break;
                
case "&":
                    
return "& amp;";
                    
break;
                
default :
                    
break;
            }

        }
    )
    
return str;
}

var benchStr;

/**
 * start benchmark
 
*/

function benchmarkStart() {

    benchStr 
= "&><"'";
    
for (var i = 0; i < 8; i++{
        benchStr 
= benchStr + benchStr;
    }

    
    
var result = benchmark(100, [ toTXT_1_wrap, toTXT_2_wrap ]);

    
var r = document.getElementById("result");
    r.innerHTML 
+= result;
}


function toTXT_1_wrap() {
    
return toTXT_1(benchStr);
}


function toTXT_2_wrap() {
    
return toTXT_2(benchStr);
}


/**
 * benchmark function
 * @param {Number} count run count
 * @param {Array} fa function array for benchmark
 
*/

function benchmark(count, fa) {
    
var result = '';

    
for (var i = 0; i < fa.length; i++{
        
var f = fa[i], d = new Date(), startTime, endTime, dummy;

        startTime 
= d.getTime();
        
for (var j = 0; j < count; j++{
            dummy 
= f();
        }

        d 
= new Date();
        endTime 
= d.getTime();

        result 
+= "function " + i + "" + (endTime - startTime) + " ms (" + count + " times)<br/> ";
    }


    
return result;
}


</ script >
</ head >
< body >
    
< input  type ="button"  onclick ="benchmarkStart()"  value ="Start Benchmark" />
    
< div  id ="result" ></ div >
</ body >
</ html >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值