我已将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字和符号的文档,这些通常是空格,换行符或制表符。但并非所有空间都会分裂。
任何想法都表示赞赏。
答案 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>