在javascript中使用时正则表达式无效组错误

Der*_*rek 2 javascript regex validation jquery jquery-validate

我有以下正则表达式检查多种类型的电子邮件地址输入

[\W"]*(?<name>.*?)[\"]*?\s*[<(]?(?<email>\S+@[^\s>)]+)[>)]?
Run Code Online (Sandbox Code Playgroud)

我得到了这个如何在 ruby​​ 中对 3 个主要电子邮件客户端中的名称和电子邮件进行正则表达式?

我面临的问题是,在 javascript 中使用它时,我收到一个错误“未捕获的语法错误:无效的正则表达式/[\W"]*(?"<name>".*?)[\"]*?\s*[<(]?(?"<email>"\S+@[^\s>)]+)[>)]?/::无效的组”

我花了一整天的时间试图解决这个问题,但我发现这个问题与lookbehind javascript不支持有关

我不擅长正则表达式,需要一些建议。有人可以指出我正确的方向。

PS:我正在尝试将此功能与 jquery 验证插件集成

jQuery 验证

Dea*_*lor 5

浏览器中的 JavaScript 通常不支持命名捕获。

命名的捕获位是这些(?<name>.*?)(?<email>\S+@[^\s>)]+)

你可以用编号的捕获组替换命名捕获,改变这一点:

[\W"]*(?<name>.*?)[\"]*?\s*[<(]?(?<email>\S+@[^\s>)]+)[>)]?
Run Code Online (Sandbox Code Playgroud)

对此:

[\W"]*(.*?)[\"]*?\s*[<(]?(\S+@[^\s>)]+)[>)]?
Run Code Online (Sandbox Code Playgroud)

正则表达式可视化

所以在 JavaScript 中它看起来像这样:

match = subject.match(/[\W"]*(.*?)[\"]*?\s*[<(]?(\S+@[^\s>)]+)[>)]?/i);
if (match != null) {
    // matched text: match[0]
    // match start: match.index
    // capturing group 1 (name): match[1]
    // capturing group 2 (email): match[2]
} else {
    // Match attempt failed
}
Run Code Online (Sandbox Code Playgroud)

请记住,只有在捕获某些内容时才会添加捕获组。