var text_data = very_big_en_string;
//去文本中的非字母符号
text_data = text_data.replace(/\W/g , " ");
//去文本中的下划线
text_data = text_data.replace(/_/g , " ");
//去文本中的数字
text_data = text_data.replace(/\d/g , " ");
//去掉文本中的单个的字母
text_data = text_data.replace(/\b.\b/g , " ");
//去掉文本中的首尾空格
text_data = text_data.replace(/^\s+|\s+$/g , "");
//去文本中的连续空格
text_data = text_data.replace(/\s+/g , " ");
very_big_en_string非常大的时候,浏览器会处理的非常慢,重则崩溃!请问这个地方有优化的方法吗?用一个或者少量的repalce代替会快些吗?怎么做呢,先谢谢了!
.replace(/\b.\b/g," ");
.replace(/^\s+|\s+$/g,"");
这条文本多了是会很慢其实主要有问题的是这里
\s+$
因为这样会导致很多不必要的分支。可以试下我原先写的这个。String.prototype.trim = function(){
var m = this, e = m.length, p = /[\s\u3000\xA0]/;
while (p.test(m.charAt(--e)));
return m.replace(/^[\s\u3000\xA0]+/, '').slice(0, e + 1);
};^^
//去掉单个的字母
text_data = text_data.replace(/\s.\s/g , " ");
//去连续的空格
text_data = text_data.replace(/\s+/g , " ");
//去掉首尾空格
//在以上处理的基础上只需trim前后一个空格就好
text_data = text_data.substring(1, text_data.length-1);谢谢,大家的讨论,我最终采取了这种方案,经测试对同一文本,这种处理方式需要的时间最短!
正确的代码应该是:
x = new Date();
text_data = text_data.replace(/[\W_\d]+/g , " ");
//去掉单个的字母
text_data = text_data.replace(/\s.\s/g , " ");
//去掉首尾空格
//text_data = text_data.replace(/^\s+|\s+$/g , "");
//去连续的空格
text_data = text_data.replace(/\s+/g , " ");
//去掉首尾空格
//在以上处理的基础上只需trim前后一个空格就好
if (text_data[0] == " ")
{
if (text_data[text_data.length-1] == " ")
{
text_data = text_data.substring(1, text_data.length-1);
}
else
{
text_data = text_data.substring(1);
}
}
else
{
if (text_data[text_data.length-1] == " ")
{
text_data = text_data.substring(0, text_data.length-1);
}
}
y = new Date();
diff = y.getTime() - x.getTime();
alert("载入本页共用了 " + diff/1000 + " 秒");
alert(text_data);
return;