【问题标题】:Google app script regex phone谷歌应用脚​​本正则表达式手机
【发布时间】:2016-08-21 23:44:44
【问题描述】:

有这样的代码: 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: asd@gmail.com

但是当模板是这样的:

Comment: ТestABC1234567 Ads
Phone: +313239084
Email: asd@gmail.com

返回:

ТestABC1234567 Ads
Phone: +313239084

不胜感激任何变体如何解决这个问题

【问题讨论】:

  • 数字前有Phone:吗?如果是,那么您肯定不需要在电话正则表达式中使用^

标签: javascript regex google-apps-script


【解决方案1】:

我宁愿使用

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

regex demo

我添加了4 来替代开头的内容(其中一个数字以4 开头)。所以,我使用了[48+]48+)。

我删除了不必要的转义符号,不需要在字符类的初始或最终位置转义连字符。

我删除了多余的捕获组或变成了非捕获,并设置了1个您需要的捕获组来存储实际数量(它将是第1组)。

我还删除了锚点,它们只能与/m 修饰符一起使用,因为输入是多行的。但是,可能有前导尾随空格。如果你真的想保留^$,试试/^\s*Phone:\s*((?:[48+][- ]?)?(?:\(?\d{3}\)?[- ]?)?[\d -]{7,10})\s*/m

【讨论】:

  • 谢谢!!适用于所有变体以及 regex101.com,现在将在这里测试所有内容))
【解决方案2】:

由于 Wiktor 已经解决了您的第一个问题,以下是您第二个问题的可能解决方案:

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

但是,如果您的评论中出现 EmailPhone 字样,您将需要改用以下内容,假设始终有 PhoneEmail 条目从换行开始:

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

Regex101

var strs = [
  'Comment: Comment Type 1 ТestABC1234567 Ads\n\
    Email: asd@gmail.com\n\
    Phone: +313239084',
  
  'Comment: Comment Type 2 ТestABC1234567 Ads\n\
    Phone: +313239084\n\
    Email: asd@gmail.com',
  
  'Comment: Comment Type 3 ТestABC1234567 Ads\n\
    Phone: +313239084', 
  
  'Comment: Comment Type 4 ТestABC1234567 Ads\n\
    Email: asd@gmail.com'
];

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

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

【讨论】:

  • 哇,感谢您快速详细的回答!皮蒂,不能选择两个有助于解决问题的答案
  • @Twil:没问题,我会在 timlawl rep 上加分。
  • @Twil:不用担心。您积极为 cmets 做出贡献并接受答案这一事实使您领先于该站点上的大多数用户,这非常好。
  • @WiktorStribiżew 你真好!我会回报的。你的回答总是很有启发性。
猜你喜欢
  • 1970-01-01
  • 2017-12-21
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多