2014-12-18 49 views
1

我已經轉換的PDF到字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 

} 

我在找什麼,這份文件特別是,是一系列的數字「112345」等...但我經常得到的結果,如「信息000100硬「。所以,很明顯,我找到了包含6位數的碎片,但我得到了額外的東西。查看帶有ms字和符號的文檔時,這些常常是空格,換行符或製表符。但並不是所有的空間都會分裂。

任何想法表示讚賞。

+1

您可以分割使用一個正則表達式:'TXT = txt.split(/ \ S /)',然後添加似乎缺少字符:'/ [\ S \ U2001 ] /' – GitaarLAB

+0

WOW。這比「」效果好得多。非常感謝。 –

+0

不客氣,請注意我已經更新了我的答案。 – GitaarLAB

回答

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出所有序列使用的6位數字。
這將匹配所有出現的空格字符+6位數字(後跟空格字符,不包含在匹配中)。

注意,我們不使用因爲/\d{6}/g也將匹配1234567123456
需要注意的是,我們還沒有使用/\D\d{6}(?=\D)/g因爲這將匹配x123456y123456

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>

1

嘗試/\s\d{6}\s/g。這將查找所有由空格包圍的連續6位數字的數字。

+0

'/ \ d {6}/g'包括'123456'在'1234567' – GitaarLAB

+0

@GitaarLAB,他說他是想以匹配6位數字。 –

+0

他當前的代碼在空格分裂,給孤立的數字。如果其中一個數字(字符串)是'1234567',那麼它將匹配'123456' – GitaarLAB

相關問題