我可以用来匹配有效的 JavaScript 函数名称的正则表达式是什么……
例如 myfunction
有效,但 my<\fun\>ction
无效。
[a-zA-Z0-9_])?
原文由 Zoom Pat 发布,翻译遵循 CC BY-SA 4.0 许可协议
我可以用来匹配有效的 JavaScript 函数名称的正则表达式是什么……
例如 myfunction
有效,但 my<\fun\>ction
无效。
[a-zA-Z0-9_])?
原文由 Zoom Pat 发布,翻译遵循 CC BY-SA 4.0 许可协议
这比您想象的要复杂。根据 ECMAScript 标准,标识符是:
an IdentifierName that is not a ReservedWord
所以首先你必须检查标识符不是以下之一:
instanceof typeof break do new var case else return void catch finally
continue for switch while this with debugger function throw default if
try delete in
将来可能还有其他一些。
IdentifierName 以以下内容开头:
a letter
the $ sign
the _ underscore
并且可以进一步包含任何这些字符加上:
a number
a combining diacritical (accent) character
various joiner punctuation and zero-width spaces
这些字符是根据 Unicode 字符类定义的,因此 [A-Z]
是不完整的。 Ä
是一个字母; ξ
是一个字母; 京
是一封信。您可以在标识符中使用所有这些,包括用于函数名称的那些。
不幸的是,JavaScript RegExp 不支持 Unicode。如果你说 \w
你只会得到 ASCII 字母数字。没有可行的方法来检查非 ASCII 标识符字符的有效性,除非在您的脚本中携带 Unicode 字符数据库的相关部分,这将非常庞大和笨拙。
您可以尝试简单地允许所有非 ASCII 字符,例如:
^[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*$
原文由 bobince 发布,翻译遵循 CC BY-SA 2.5 许可协议
13 回答13k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
[编辑] 请参阅 下面@bobince 的帖子 以获得更正确和更彻底的答案。此答案已保留以供参考,并已编辑以减少错误。
JavaScript 中的有效名称必须以 Unicode 字母 (
\p{L}
)、美元符号或下划线开头,然后可以包含任何这些字符以及数字,组合变音(重音)字符,以及各种连接标点符号和零宽度空间。 Additionally, it cannot be a word reserved by the JavaScript language (egabstract
,as
,boolean
,break
,byte
,case
等)。完整的正则表达式解决方案在纯 JavaScript 中会相当复杂,但 XRegExp Unicode 插件 可以大大简化任务。 这个在线函数名称测试器 可能也很有用。
[原创] 这是一个 不完整的 正则表达式, _仅使用美国 ASCII 字母_:
您还必须检查它是否不匹配任何保留字(例如 abstract、boolean、break、byte、…、while、with 等)。这是 该列表的开始,以及一个示例函数: