2014-12-18 2 views
1

Я преобразовал файл 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 

} 

Что я ищу, в частности, в этом документе, являются ряд чисел «112345» и т.д ... но я часто получаю результаты, такие как «ИНФОРМАЦИЯ 000100 Hard ". Итак, ясно, что я нахожу части, которые включают 6 цифр, но я получаю дополнительные вещи. Глядя на документ с ms word и символами, это часто пробелы, разрывы строк или вкладки. но не все пробелы становятся разделенными.

Любые мысли приветствуются.

+1

Вы можете разделить с использованием регулярных выражений: 'TXT = txt.split (/ \ s /)', а затем добавить символы, которые появляются, не хватает: '/ [\ s \ u2001 ]/' – GitaarLAB

+0

WOW. Это работало намного лучше, чем «». Спасибо большое. –

+0

Добро пожаловать, заметьте, я обновил свой ответ. – GitaarLAB

ответ

1

(относительно вашего исходного кода :)
Вы можете разделить на regex /\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 цифр с использованием /\s\d{6}(?=\s)/g.
Это будет соответствовать всем вхождениям символа пробела + 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>

1

Пробег: /\s\d{6}\s/g. Это найдет все числа, которые имеют 6 цифр подряд, которые окружены пробелом.

+0

'/ \ d {6}/g' включает' 123456' в '1234567' – GitaarLAB

+0

@GitaarLAB, он заявил, что пытался сопоставить 6-значные цифры. –

+0

Его текущий код разбивается на пробелы, давая изолированные числа.Если одно из этих чисел (строк) равно '1234567', то оно будет соответствовать' 123456' – GitaarLAB

Смежные вопросы