2016-04-27 96 views
2

有這樣的代碼: https://github.com/dezostus/googleapp/blob/master/z_draft/email%20parce(test).gs谷歌應用程序腳本的正則表達式電話

問題與此正則表達式這部分內容:

.match(/Phone:^((8|\+)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/); 
.match(/Comment:\s*([\s\S]+)(?=Email|Phone)/); 

電話不返回任何東西..真的很多東西,但最後還是沒有任何工程。可能的面具是:

12361234567 
8029123456 
+12361234567 
+375 29 123 45 67 
4(123)123-45-67 
123-45-67 
9261234567 

評論與效果很好:

Comment: ТestABC1234567 Ads 
Phone: +313239084 
or 
Comment: ТestABC1234567 Ads 
Email: [email protected] 

但是當這樣的模板:

Comment: ТestABC1234567 Ads 
Phone: +313239084 
Email: [email protected] 

它返回:

ТestABC1234567 Ads 
Phone: +313239084 

將是感激任何變種如何解決這個問題

+0

你有'電話:'號碼前?如果是,那麼你肯定不需要在電話正規表達式中使用'^'。 –

回答

2

我寧願使用

/Phone:\s*((?:[48+][- ]?)?(?:\(?\d{3}\)?[- ]?)?[\d -]{7,10})/ 

regex demo

我加入4作爲替代什麼可能是在開始(其中一個號碼開始與4)。所以,我用[48+]48+)。

我刪除了不必要的轉義符號,不需要在字符類的初始位置或最終位置中跳過連字符。

我刪除了redudant捕捉組或變成非捕捉,並設置1您需要存儲實際數量(它將是組1)的捕獲組。

我還刪除了錨點,它們只能與/m修飾符一起使用,因爲輸入是多行的。但是,可能會有前導空格。如果您確實想保留^$,請嘗試/^\s*Phone:\s*((?:[48+][- ]?)?(?:\(?\d{3}\)?[- ]?)?[\d -]{7,10})\s*/m

+0

謝謝!適用於所有變種,也適用於regex101。com,現在會在這裏測試一切)) – Twil

2

由於Wiktor的已經解決了你的第一個問題,這裏是你的第二個問題,一個可能的解決方案:

/Comment:\s*([\s\S]+?)(?=(?:Phone|Email))/ 

但是,如果的話電子郵件電話出現在您的評論,您需要改用以下,假設PhoneEmail條目總是開始換行:

/Comment:\s*([\s\S]+?)(?=(?:\nPhone|\nEmail))/ 

Regex101

var strs = [ 
 
    'Comment: Comment Type 1 ТestABC1234567 Ads\n\ 
 
    Email: [email protected]\n\ 
 
    Phone: +313239084', 
 
    
 
    'Comment: Comment Type 2 ТestABC1234567 Ads\n\ 
 
    Phone: +313239084\n\ 
 
    Email: [email protected]', 
 
    
 
    'Comment: Comment Type 3 ТestABC1234567 Ads\n\ 
 
    Phone: +313239084', 
 
    
 
    'Comment: Comment Type 4 ТestABC1234567 Ads\n\ 
 
    Email: [email protected]' 
 
]; 
 

 
var re = /Comment:\s*([\s\S]+?)(?=(?:Phone|Email))/; 
 

 
strs.forEach(function(str) { 
 
    document.body.insertAdjacentHTML('beforeend', str.match(re).slice(1) + '<br>'); 
 
});

+0

只是哇,感謝您的快速和詳細的答案!皮蒂,那不能選擇兩個答案,幫助解決問題 – Twil

+0

@Twil:沒問題,我會加上timolawl代表。 –

+1

@Twil:不用擔心。事實上,你積極地提出意見並接受答案,讓你遠離本網站的大多數用戶,這非常好。 – timolawl