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代替会快些吗?怎么做呢,先谢谢了!

解决方案 »

  1.   

    .replace(/[\W_\d\s]+/g," ");//这个合并一下,会快很多
    .replace(/\b.\b/g," ");
    .replace(/^\s+|\s+$/g,"");
      

  2.   

    text_data = text_data.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);
    };^^
      

  3.   

    text_data = text_data.replace(/[\W_\d]+/g , " ");
    //去掉单个的字母
    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);谢谢,大家的讨论,我最终采取了这种方案,经测试对同一文本,这种处理方式需要的时间最短!
      

  4.   


    正确的代码应该是:
    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;