2013-06-25 49 views
1

我正在使用node.js在某些轉換後的文本中挑出字段值。隨機空間很雜亂。一行看起來是這樣的:正則表達式匹配所有字符,直到2個空格

'ADDRESS: 2626 W MAIN ST          Tran Total $1.91.$3' 

我知道字段開始的地方,但我不能在兩個空白後得到它。這裏就是我想,但一切恢復的權利「地址:」:

/ADDRESS:\s([[^\s{2,}]+)/ 

有沒有一種方法,包括空間,並在同一個超前的第一雙空間停下來?這不起作用:

/ADDRESS:\s(.*(q!\s{2,}))/ 
+0

如果沒有兩個空格,而是地址用細繩或換行的末尾結束? – Paul

回答

2
/ADDRESS:\s((?:\S|\s(?!\s))*)/ 

應該做的伎倆。任何數量的非空格或空格都沒有空格。

+0

我認爲它需要兩個空格,以便地址中的單詞之間的空格不會阻止它。 – Barmar

+0

@Barmar:空格後面沒有空格。 – Ryan

+0

是的,這讓我很接近。我意識到我有一些\ n和一些行與多個空格,因爲它正在轉換與OCR。謝謝。 – jabbermonkey

3

爲什麼不只是這樣做呢?

out = input.split(" ")[0]; // two spaces in that string 

這比正則表達式更有效。或者試試這個:

var spaces = input.indexOf(" "); // again, two spaces 
out = spaces < 0 ? input : input.substr(0,spaces); 
+0

或input.substring(input.indexOf('')+ 1,input.indexOf(''))'爲組。 (第二個是兩個空格,愚蠢的評論。) – Ryan

+0

這是不錯的選擇,但有些時候我們沒有選擇。例如在我的情況下,我正在研究現有的項目,我們有方法從基於正則表達式的pdf中讀取值。我不能只爲一個值改變現有的邏輯。 – Faisal

6

使用非貪婪通配符:

/ADDRESS:\s.*?(?=\s{2})/ 

REGEXR

相關問題