有这样的代码: 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
将不胜感激任何变种如何解决这个问题
答案 0 :(得分:2)
我宁愿使用
/Phone:\s*((?:[48+][- ]?)?(?:\(?\d{3}\)?[- ]?)?[\d -]{7,10})/
请参阅regex demo
我添加4
作为开头可能的替代(其中一个数字以4
开头)。所以,我使用[48+]
(4
或8
或+
)。
我删除了不必要的转义符号,无需在字符类的初始或最终位置转义连字符。
我删除了还原剂捕获组或转为非捕获组,并设置了您需要的1个捕获组,用于存储实际数量(它将是第1组)。
我还删除了锚点,它们只能与/m
修饰符一起使用,因为输入是多行的。但是,可能存在前导尾随空格。如果您真的想保留^
和$
,请尝试/^\s*Phone:\s*((?:[48+][- ]?)?(?:\(?\d{3}\)?[- ]?)?[\d -]{7,10})\s*/m
。
答案 1 :(得分:2)
由于Wiktor已经解决了您的第一个问题,因此这是您第二个问题的可能解决方案:
/Comment:\s*([\s\S]+?)(?=(?:Phone|Email))/
但是,如果您的评论中出现电子邮件或电话字样,则需要使用以下内容,假设Phone
和{{1条目总是从换行符开始:
Email
/Comment:\s*([\s\S]+?)(?=(?:\nPhone|\nEmail))/