Javascript 将Golang正则表达式转换为JS正则表达式

Javascript 将Golang正则表达式转换为JS正则表达式,javascript,regex,go,Javascript,Regex,Go,我有一个来自Golang的正则表达式(nameComponentRegexp)。如何将其转换为JavaScript样式的正则表达式 对我来说,主要的阻塞问题是: 如何在JavaScript中正确执行可选和重复 我尝试了从匹配(`(?:[.\u124; | | |[-]*)`)复制,但它无法匹配单句点或单下划线。我在在线正则表达式测试仪上试过了 来自Golang的描述: nameComponentRegexp限制注册表路径组件名称启动 至少有一个字母或数字,以下部分可以 由一个句点、一个或两个下划

我有一个来自Golang的正则表达式(nameComponentRegexp)。如何将其转换为JavaScript样式的正则表达式

对我来说,主要的阻塞问题是:

  • 如何在JavaScript中正确执行
    可选
    重复
  • 我尝试了从
    匹配(`(?:[.\u124; | | |[-]*)`)
    复制,但它无法匹配单句点或单下划线。我在在线正则表达式测试仪上试过了
  • 来自Golang的描述:

    nameComponentRegexp限制注册表路径组件名称启动 至少有一个字母或数字,以下部分可以 由一个句点、一个或两个下划线和多个破折号分隔

    一些有效的例子:

    • a、 a
    • a_a
    • a_uu_uA
    • a-a
    • a--a
    • a--a

    查看如何构建
    名称组件regexp
    :从
    字母数字regexp
    开始,然后匹配1个或多个
    分隔符regexp
    +
    字母数字regexp
    序列的1个或0个匹配项

    是否有下列情况:

    //可选将表达式包装在非捕获组中,并使 //生产可选。

    func optional(res ...*regexp.Regexp) *regexp.Regexp { return match(group(expression(res...)).String() + `?`) } 因此,你需要的是

    /^[a-z0-9]+(?:(?:[._]|__|-*)[a-z0-9]+)*$/
    

    详细信息

    • ^
      -字符串的开头
    • [a-z0-9]+
      -1个或多个字母数字符号
    • (?:(?:[.|]| |-*)[a-z0-9]+)*
      -零个或多个以下序列:
      • (?:[.|]| |-*)
        -a
        或0+连字符
      • [a-z0-9]+
        -1个或多个字母数字符号
    如果要禁止像
    aaaa
    这样的字符串,则需要将模式中的所有
    *
    替换为
    +
    ()

    JS演示:

    var ss=['a.a','a_a','a_a','a-a','a--a','a--a'];
    变量rx=/^[a-z0-9]+(?:(?:[.|]| | |-*)[a-z0-9]+)*$/;
    用于(ss的var s){
    控制台日志,“=>”,接收测试);
    
    }
    展示您的最佳尝试。重复和/或可选组或字符是regex 101的标准功能。因此,可能类似于
    /^[a-z\d]+((?:[.|]| |[-]*)[a-z\d]+)*$/
    的东西,我想
    repeated()
    意味着“所有”,所以在其他语言中通常作为
    g
    标志实现。
    optional()
    做什么?它是否返回选项monad?@slebetman func repeated(res ...*regexp.Regexp) *regexp.Regexp { return match(group(expression(res...)).String() + `+`) }
    /^[a-z0-9]+(?:(?:[._]|__|-*)[a-z0-9]+)*$/