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

How to extract specific string in a bracket within an email subject with multiple parentheses/brackets?

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

这是当前代码:

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)