2016-04-27 23 views
2

は、このようなコードを持っています。可能なマスクは、次のとおりです。Googleのアプリスクリプトの正規表現の電話

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を追加しました(数字の1が4から始まる)を参照してください使用すると思います。だから、[48+]4または8または+のいずれか)を使用しました。

不要なエスケープ記号を削除しました。文字クラスの最初または最後の位置でハイフンをエスケープする必要はありません。

還元剤捕獲グループを取り除いたか、または捕獲しないようにして、実際の番号(グループ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))/ 

言葉がメールまたは電話があなたのコメントに表示される場合は、あなたがする必要があります。

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

PhoneEmailエントリは常に改行に開始すると仮定して、代わりに以下を使用します

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

ちょうどうわー、速く詳細な答えに感謝!ピティーは、問題を解決するのに役立つ2つの答えを選ぶことはできません – Twil

+0

@Twil:問題はありません、私はtimolawl担当者に追加します。 –

+1

@Twil:心配はいりません。あなたが積極的にコメントに貢献し、回答を受け入れているという事実は、このサイトのほとんどのユーザーよりも先にマイルがあることを示しています。 – timolawl

関連する問題