代码之家  ›  专栏  ›  技术社区  ›  vitaly-t

匹配有效JavaScript命名空间的RegEx

  •  0
  • vitaly-t  · 技术社区  · 6 年前

    要匹配正确的任意深度JavaScript命名空间,正则表达式是什么?

    有效输入

    • a
    • a.b
    • $a._b.$$c.__d
    • a_$09.b_$09.c_$09

    所以基本上,JavaScript开放名变量由点连接,每个单独的名称可以包含 a-z , A-Z , _ , $ 0-9 ,但不能从 0-9个 .

    无效条目

    • 1a -不能以数字开头
    • abc.1a -子名称也不能以数字开头
    • .a -不能有前导点
    • a. -不能以点结尾

    我试过这个: ^([a-z$_][a-z$_0-9]*\.?)*[^\.]$ ,同时禁止尾随 . ,最后允许任何额外的符号,例如 , ,这是无效的。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sphinx    6 年前

    使用 ^[a-zA-Z\$\_][0-9a-zA-Z\$\_]*(\.[a-zA-Z\$\_][0-9a-zA-Z\$\_]*)*$

    因为 \西 匹配任何单词字符(等于 [a-zA-Z0-9_u] ),

    因此正如@emsimpson92所说,您可以有一个简化版本:

    ^[a-zA-Z\$\_][\$\w]*(\.[a-zA-Z\$\_][\$\w]*)*$

    对于@vitaly-t评论过的最短版本(删除了不必要的转义),它将是:

    /^[a-z$_][$\w]*(\.[a-z$_][$\w]*)*$/i

    Regex Online