繁体   English   中英

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

[英]Regex invalid group error while using in javascript

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

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

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

我面临的问题是,在javascript中使用此方法时,出现错误“ Uncaught SyntaxError:无效的正则表达式:/[ /[\\W"]*(?"<name>".*?)[\\"]*?\\s*[<(]?(?"<email>"\\S+@[^\\s>)]+)[>)]?/ :无效的组“

我花了一整天的时间来解决此问题,但发现问题与回退有关 javascript不支持

我对正则表达式非常不好,需要一些建议。 有人能指出我正确的方向吗?

PS:我正在尝试使此功能与jquery validate插件集成

jQuery验证

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

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

您可以用编号的捕获组替换命名的捕获,更改以下内容:

[\W"]*(?<name>.*?)[\"]*?\s*[<(]?(?<email>\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
}

请记住,只有捕获组才能捕获某些内容。

据我所知,这没有什么可回避的地方(就像这样: (?<=prefix) ),但也许不支持标记的匹配项( (?"<name>"...) )。 尝试不使用它,并按其编号引用匹配项:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM