有这样的代码:草稿/电子邮件%20 20parce(测试).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如果有任何变体来解决这个问题,我将不胜感激。
发布于 2016-04-27 15:17:01
我宁愿用
/Phone:\s*((?:[48+][- ]?)?(?:\(?\d{3}\)?[- ]?)?[\d -]{7,10})/我添加了4作为一种替代开始的方法(其中一个数字以4开头)。因此,我使用了[48+] ( 4、8或+)。
我删除了不必要的转义符号,不需要转义字符类中初始或最后位置的连字符。
我删除了红色捕获组或者变成了非捕获组,并设置了您需要的1捕获组来存储实际数量(它将是组1)。
我还删除了锚,它们只能与/m修饰符一起使用,因为输入是多行的。然而,可能有领先的尾随空间。如果您真的想保留^和$,请尝试/^\s*Phone:\s*((?:[48+][- ]?)?(?:\(?\d{3}\)?[- ]?)?[\d -]{7,10})\s*/m。
发布于 2016-04-27 15:21:18
既然Wiktor已经解决了您的第一个问题,下面是您的第二个问题的可能解决方案:
/Comment:\s*([\s\S]+?)(?=(?:Phone|Email))/但是,如果您的评论中出现了电子邮件或电话这个词,那么您将需要使用以下选项,假设Phone和Email条目总是以换行符开头:
/Comment:\s*([\s\S]+?)(?=(?:\nPhone|\nEmail))/
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>');
});
https://stackoverflow.com/questions/36893858
复制相似问题