在 Javascript 中使用正则表达式提取姓名和电子邮件

Cod*_*Guy 4 javascript regex string

我有一个类型的字符串,预期的结果是

input = "[Peter Jane Minesotta <pet.j.minn@mnu.al.edu>]"
Run Code Online (Sandbox Code Playgroud)

输出

Fname = "Peter"
SecondAndRemainingNames = "Jane Minesotta"
email = "pet.j.minn@mnu.al.edu"
Run Code Online (Sandbox Code Playgroud)
input = "[Peter  <pet.j.minn@mnu.al.edu>]"
Run Code Online (Sandbox Code Playgroud)

输出

    Fname = "Peter"
    SecondAndRemainingNames = ""
    email = "pet.j.minn@mnu.al.edu
Run Code Online (Sandbox Code Playgroud)

我需要使用正则表达式提取

我试过

input.match(/\w/gim)
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 6

您可以使用

const rx = /\[(\S+)(?:\s+(.*?))?\s+<([^<>]+)>]/
const strings = ['[Peter Jane Minesotta <pet.j.minn@mnu.al.edu>]','[Peter  <pet.j.minn@mnu.al.edu>]'];
for (const s of strings) {
  const [_, Fname, SecondAndRemainingNames, email] = s.match(rx);
  console.log([Fname, SecondAndRemainingNames, email]);
}
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

细节

  • \[- 一个[字符
  • (\S+)- 第 1 组:一个或多个非空白字符(要留在 内[...],您可以[^\s[\]]+改用)
  • (?:\s+(.*?))?- 1+空格,一个可选的字符串,随后用2组捕获比换行字符以外的任何零个或多个字符尽可能少(替换.*?[^[\]]*?,如果你想留内[...]
  • \s+ - 一个或多个空格
  • <([^<>]+)>- >, 第 3 组:除<and之外的一个或多个字符>,然后>
  • ]- 一个]字符。