2015-01-26 147 views
-1

在Javascript中,我正在讀取.txt文件以解析並放入HTML表格。這工作得很好。在這些信息中,有地址線,它們是第一行和第二行(第二行是公寓號碼,空格號碼等)的組合。它將這些細節讀入一行。

我想要做的是分手什麼是第一和第二個地址行,以便它可以乾淨地饋送到數據庫中。爲了打破它們,我寫了一個正則表達式來捕捉儘可能多的選項。他們中的大多數工作得很好。其中一個拒絕正常工作,即使所有的測試用小例子說它應該工作。

下面是我想與之合作的正則表達式的部分:使用Demo
Javascript Regular Expression not working right

正則表達式:

([\,\s]*)(Ste |Ste\.) 

在:

12 Watershore Circle 
825 Stewart Street 
820 N Lincoln Way 
9235 Bella Vista Way 
P.O. Box 4438 
9936 Stone Oak Way 
599 Hamstead Drive 
3941 Park Drive Ste 20 #147 
3609 Bradshaw RD,ste H #107 
7909 Walerga Road, Ste. 112, PMB 108 

選項我試過了我想要的:

([\,\s]*)(Ste |Ste\.) 
([\,\s]+)(Ste |Ste\.) 
(\,*[\W]Ste[\W]|\,*[\W]Ste\.[\W]) 

什麼在我的網頁直播結果似乎認爲這意味着:

(\,*[\w]Ste[\w]|\,*[\w]Ste\.[\w]) 

正如你所看到的,我只是想分開「科技教育」(不區分大小寫)從該行的其餘部分。現場測試中發生的情況是,任何「Ste」(仍不區分大小寫)的實例都會觸發這些線路。上面給出的鏈接具有示例正則表達式,可以生成我從現場運行中獲得的內容。

這個正則表達式的情況是在帶有Razor(c#)視圖頁的MVC 4中的JavaScript代碼中。再一次,我沒有列出的正則表達式的其餘部分正在尋找完全不同的措辭,可以正常工作。這只是這一塊。

任何有關如何正確調試這個或任何解決方案的建議將不勝感激。謝謝。

+0

你的正則表達式搜索'Ste [space]'或'Ste [任何字符] [空格]'。當你瞄準文字'.'時,你應該總是躲避''。',就像'\ .'。您可以將正則表達式縮短爲'([\,\ s] *)(Ste \。?)',而無需使用這些正則表達式來查看代碼。 – 2015-01-26 22:58:24

+0

我的錯字很好。我已經改變了這段時間的適當逃跑。不幸的是,這仍然造成兩個案件的問題。如果我使用它,無論出於何種原因,它會分割像「Allister」這樣的詞,因爲前面的空格和逗號是完全可選的。如果我將它改爲'([\,\ s] +)(Ste \。?)'強制其中至少有一個在前面,它找不到任何匹配,即使它應該按照演示。 – TerriWiseden 2015-01-26 23:26:57

+0

可能不會改變任何東西,但你不需要轉義逗號。 – cbreezier 2015-01-26 23:55:11

回答

0

所以,顯然,Crazysheep,你的評論是非常重要的。這讓我想到了逃跑。

我忽略發佈在我的問題是,在JavaScript中,我沒有直接寫正則表達式作爲正則表達式。由於該行的長度,我將它寫入了一個字符串,因此我可以將它分成多行,然後通過
var re = new RegExp(reString,"gi");

將該字符串轉換爲正則表達式由於這個小小的細節,所有的斜線轉義工作像String轉義。這意味着無論什麼時候我有\.,對於String而言,它只是在執行字面值.而不是正則表達式轉義。這適用於所有逃脫。

我之所以注意到它的原因是因爲對於正則表達式格式的文件,看起來像這樣:(\. \d+),它在某個東西,一個空間和一個D.例如:3 Drivea Dr.

要解決這個問題,在字符串,這將是\.在正則表達式,我已經把\\.,爲了躲避\因此它可以作爲它必須在正則表達式。

所以,謝謝你Crazysheep,你已經幫助了超過你所知道的! XD