首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >谷歌应用程序脚本regex手机

谷歌应用程序脚本regex手机
EN

Stack Overflow用户
提问于 2016-04-27 15:10:45
回答 2查看 372关注 0票数 2

有这样的代码:草稿/电子邮件%20 20parce(测试).gs

这个正则表达式的问题是这个部分:

代码语言:javascript
运行
复制
.match(/Phone:^((8|\+)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/);
.match(/Comment:\s*([\s\S]+)(?=Email|Phone)/);

电话什么都不回。很多事情都是真的,但最终什么都没有。可能的面具是:

代码语言:javascript
运行
复制
12361234567
8029123456
+12361234567
+375 29 123 45 67
4(123)123-45-67
123-45-67
9261234567

意见适用于:

代码语言:javascript
运行
复制
Comment: ТestABC1234567 Ads
Phone: +313239084
or
Comment: ТestABC1234567 Ads
Email: asd@gmail.com

但是当像这样的模板:

代码语言:javascript
运行
复制
Comment: ТestABC1234567 Ads
Phone: +313239084
Email: asd@gmail.com

它返回:

代码语言:javascript
运行
复制
ТestABC1234567 Ads
Phone: +313239084

如果有任何变体来解决这个问题,我将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-27 15:17:01

我宁愿用

代码语言:javascript
运行
复制
/Phone:\s*((?:[48+][- ]?)?(?:\(?\d{3}\)?[- ]?)?[\d -]{7,10})/

regex演示

我添加了4作为一种替代开始的方法(其中一个数字以4开头)。因此,我使用了[48+] ( 48+)。

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2016-04-27 15:21:18

既然Wiktor已经解决了您的第一个问题,下面是您的第二个问题的可能解决方案:

代码语言:javascript
运行
复制
/Comment:\s*([\s\S]+?)(?=(?:Phone|Email))/

但是,如果您的评论中出现了电子邮件或电话这个词,那么您将需要使用以下选项,假设PhoneEmail条目总是以换行符开头:

代码语言:javascript
运行
复制
/Comment:\s*([\s\S]+?)(?=(?:\nPhone|\nEmail))/

Regex101

代码语言:javascript
运行
复制
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>');
});

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36893858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档