我有一个类型的字符串,预期的结果是
input = "[Peter Jane Minesotta <pet.j.minn@mnu.al.edu>]"
输出Fname = "Peter"
SecondAndRemainingNames = "Jane Minesotta"
email = "pet.j.minn@mnu.al.edu"
input = "[Peter <pet.j.minn@mnu.al.edu>]"
输出 Fname = "Peter"
SecondAndRemainingNames = ""
email = "pet.j.minn@mnu.al.edu
我需要使用正则表达式提取我试过了
input.match(/\w/gim)
最佳答案
您可以使用
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]);
}
见regex demo .
详情
\[
- 一个 [
字符 (\S+)
- 第 1 组:一个或多个非空白字符(要留在 [...]
内,您可以改用 [^\s[\]]+
)(?:\s+(.*?))?
- 1+ 个空格的可选字符串,后跟第 2 组,尽可能少地捕获除换行符之外的任何零个或多个字符(如果您想留在 .*?
内,请将 [^[\]]*?
替换为 [...]
)\s+
- 一个或多个空格 <([^<>]+)>
- >
, 第 3 组:除 <
之外的一个或多个字符和 >
,然后 >
]
- 一个 ]
字符。 关于javascript - 在 Javascript 中使用正则表达式提取姓名和电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64554251/