代码之家  ›  专栏  ›  技术社区  ›  Stramike

节点js无效正则表达式:无效组[重复]

  •  0
  • Stramike  · 技术社区  · 6 年前

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

    我搞定了 How do I regex a name and an email out of the 3 major email clients in ruby?

    我面临的问题是,在javascript中使用它时,会出现一个错误“Uncaught SyntaxError:Invalid regular expression: /[\W"]*(?"<name>".*?)[\"]*?\s*[<(]?(?"<email>"\S+@[^\s>)]+)[>)]?/ :无效组“

    回头看 javascript不支持

    我不擅长正则表达式,需要一些建议。有人能告诉我正确的方向吗。

    PS:我试图使这个函数与jquery验证插件集成

    Jquery Validation

    0 回复  |  直到 7 年前
        1
  •  4
  •   Dean Taylor    9 年前

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

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

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

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

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

    Regular expression visualization

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

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

        2
  •  0
  •   fejese    11 年前

    (?<=prefix) ) 但可能不支持标记匹配( (?"<name>"...) ). 尝试不使用该选项,并按匹配项的编号引用匹配项:

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

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