微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在带有多个括号/括号的电子邮件主题中提取括号中的特定字符串?

如何解决如何在带有多个括号/括号的电子邮件主题中提取括号中的特定字符串?

我正在尝试提取电子邮件主题中括号内的特定字符串。

这是当前代码

var vendorNo = msg[j].getSubject().split('vendor No:')[1].replace(/[A-Za-z-0-9]+$/,'').slice(1,-1); //vendor number from email subject 

我目前使用的代码,从带有单括号的电子邮件主题提取供应商编号没有问题,但是当主题有多个括号时就会出现问题。

例如:

电子邮件主题:供应商 A(供应商编号:12345(EDC1))

输出:123456(EDC1)

期望输出:123456

电子邮件主题:供应商 B(供应商编号:987654)[ref:xxxxxxxxx]

输出:987654)[参考:xxxxxxxxx

期望输出:987654


当前代码不太正确,因为它提取vendor No: 之后的所有其他字符串,并且仅删除提取后的最后一个字符。供应商编号也可能有所不同,可以是 5-8 个字符,可以是数字和字母的混合(例如 123CFT 或 1234567)。

我已经尝试过 .slice(1,7),但对于多于或少于字符数的字符串,它不灵活。

那么有没有办法让代码提取特定括号内的字符串的一部分,即供应商编号?

解决方法

您可以拆分获取":"之后的部分,并使用String.search获取作为特殊字符的第一个字符的索引:

function getVendorNo(s) {
  return  a = s.split(":")[1].trim(),a.substring(0,a.search(new RegExp("[^a-zA-Z0-9]")));
}

console.log(getVendorNo("Supplier A (Vendor No.: 12345(EDC1))"));
console.log(getVendorNo("Supplier B (Vendor No.: 987654) [ref:xxxxxxxxx]"));

,

您可以使用任何一种正则表达式

/\d[^\W]+/

/\d\w+/

/(?=\d)\w+/

const str = "Email Subject: Supplier A (Vendor No.: 12345(EDC1))";

const result1 = str.match(/\d[^\W]+/);
const result2 = str.match(/\d\w+/);
const result3 = str.match(/(?=\d)\w+/);

console.log(result1)
console.log(result2)
console.log(result3)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。