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

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

[\W"]*(?.*?)[\"]*?\s*[<(]?(?\S+@[^\s>)]+)[>)]? 

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

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

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

我对正则表达式表达非常不满意,需要一些建议。 有人可以指出我正确的方向。

PS:我正在尝试将此function与jquery validate插件集成

Jqueryvalidation

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

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

您可以使用编号的捕获组替换命名捕获,更改此设置:

 [\W"]*(?.*?)[\"]*?\s*[<(]?(?\S+@[^\s>)]+)[>)]? 

对此:

 [\W"]*(.*?)[\"]*?\s*[<(]?(\S+@[^\s>)]+)[>)]? 

正则表达式可视化

所以在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 } 

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

添加一个: after (?以防止paranthesis参考:

 /[\W"]*(?:"".*?)[\"]*?\s*[<\(]?(?:""\S+@[^\s>)]+)[>)]?/ 

据我所知,它没有外观(它是这样的: (?<=prefix) )但也许不支持标记匹配( (?""...) )。 尝试没有它,并通过他们的号码引用匹配:

 /[\W"]*(.*?)[\"]*?\s*[<(]?(\S+@[^\s>)]+)[>)]?/ 

该名称将是第一个,电子邮件是第二个捕获的组