将文本文件拆分为单个数组元素

时间:2014-12-18 20:00:05

标签: javascript split text-files

我已将pdf转换为word到txt文件。我想吐出每一个空白区域,包括标签,返回,空格等......这样每个单词或一系列数字都是它自己的数组元素。它似乎并不适用于所有情况。我正在尝试的是......

function displayContents(txt) {
    var el = document.getElementById('main'); 
    txt = txt.replace('\t',' ');
    txt = txt.replace('\r',' ');
    txt = txt.replace('\n',' ');
    txt = txt.split(" ");   
    var contents = new Array();

    for(var i in txt) {
        var elem = txt[i];
        var reg = /\d{6}/;
        if (reg.test(elem)) {
            contents.push(elem);
            contents.push("</br>");
        }

    }
    el.innerHTML = contents; //display output in DOM

} 

我正在寻找的,特别是在本文档中,是一系列数字&#34; 112345&#34;等...但我经常得到诸如&#34;信息000100 Hard,&#34;等结果。所以,很明显,我找到了包含6位数的作品,但我得到了额外的东西。查看带有ms字和符号的文档,这些通常是空格,换行符或制表符。但并非所有空间都会分裂。

任何想法都表示赞赏。

2 个答案:

答案 0 :(得分:1)

试试/\s\d{6}\s/g。这将找到连续6位数字的所有数字,这些数字被空格包围。

答案 1 :(得分:1)

(关于你的原始代码:)
您可以拆分正则表达式/\s+/,而不是替换那些类似空格的字符列表 然后使用/^\d{6}$/检查一个字符串是否只包含6位数(从头到尾)。

最后过滤出6位数的数字字符串。

试试这个例子:

function displayContents(txt){
    var contents = new Array()
    ,         el = document.getElementById('main')
    ,          i = 0
    ,          L
    ;
  
    txt=txt.split(/\s+/);   

    for(L=txt.length; i<L; i++){
      /^\d{6}$/.test(txt[i]) && contents.push(txt[i]);
    }

    el.innerHTML = contents.join('<br>') + '<br>';

}
<textarea style="width:99%; height:100px" 
       onchange="displayContents(this.value)"
></textarea>
<div id="main"></div>

可以进一步优化到仅仅2行代码:

function displayContents(txt){
  for(var r=[], L=(txt=txt.split(/\s+/)).length, i=0; i<L; /^\d{6}$/.test(txt[i]) ? r.push(txt[i++]) : i++);
  document.getElementById('main').innerHTML=r.join('<br>') + '<br>';
}

或者,您可以使用match /\s\d{6}(?=\s)/g输出所有6位数的序列 这将匹配所有出现的空格字符+6位数(后跟空格字符,不包括在匹配中)。

请注意,我们使用/\d{6}/g,因为它也会匹配123456中的1234567 !!
请注意,我们也不使用/\D\d{6}(?=\D)/g,因为它与123456中的x123456y匹配!!

function displayContents(txt){
  for( var L=(txt=(' '+txt+' ').match(/\s\d{6}(?=\s)/g)).length
     ; L--
     ; txt[L]=txt[L].slice(1)  //removing first non-digit character.
     );
  document.getElementById('main').innerHTML=txt.join('<br>') + '<br>';
}
<textarea style="width:99%; height:100px" 
       onchange="displayContents(this.value)"
></textarea>
<div id="main"></div>