javascript - 正则表达式匹配一个有效的 JavaScript 命名空间
问题描述
匹配正确的任意深度 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]*\.?)*[^\.]$
,虽然禁止尾随.
,但最后允许任何额外的符号,例如,
, 这是无效的。
解决方案
用途^[a-zA-Z\$\_][0-9a-zA-Z\$\_]*(\.[a-zA-Z\$\_][0-9a-zA-Z\$\_]*)*$
因为\w匹配任何单词字符(等于[a-zA-Z0-9_]),
正如@emsimpson92 所说,您可以拥有一个简化版本:
^[a-zA-Z\$\_][\$\w]*(\.[a-zA-Z\$\_][\$\w]*)*$
对于@vitaly-t 评论的最短版本(删除了不必要的转义),它将是:
/^[a-z$_][$\w]*(\.[a-z$_][$\w]*)*$/i
推荐阅读
- c# - C# - How to declare a 2D array in run time
- excel - How to do Multiple Vlookups Across Workbooks Excel
- bash - 将字符串的最后一个字符转换为大写
- batch-file - 将文件复制到名称以这些文件名的最后 3 个字符开头的目录
- javascript - Javascript中的switch语句附加它需要一个分号并且不执行
- python - Series.replace() 不会根据替换更改 dtype
- python - 使用 sudo 权限在 setuptools 中发布安装脚本
- python - 将许多熊猫数据框分配给变量
- html - 期待“OPEN_INVERSE_CHAIN”、“INVERSE”、“OPEN_ENDBLOCK”,得到“EOF”
- c - 如何从 esp-idf 中的 NTP 服务器重新同步时间?