【问题标题】:How to extract specific string in a bracket within an email subject with multiple parentheses/brackets?如何在带有多个括号/括号的电子邮件主题中提取括号中的特定字符串?
【发布时间】:2021-07-19 03:06:44
【问题描述】:

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

这是当前代码:

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) [ref:xxxxxxxxx

所需输出:987654


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

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

那么有没有一种解决方案,所以代码只提取特定括号内的字符串的一部分,即供应商编号?

【问题讨论】:

  • 简单地使用/\d+/
  • @decpk 厂商编号也不一定只包含数字,可以与字母混合。抱歉,我已在帖子中对其进行了编辑。
  • 那么你可以使用/\d[^\W]+/或者干脆/\d\w+/或者(?=\d)\w+
  • @Spectric 是的,感谢您指出这一点。我没有注意到错字。

标签: javascript google-apps-script gmail


【解决方案1】:

你可以拆分得到":"之后的部分,使用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]"));

【讨论】:

    【解决方案2】:

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

    /\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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 2012-09-19
      • 2018-04-14
      相关资源
      最近更新 更多