我对正则表达式很生疏,需要一些帮助。继承的js代码库使用camel case和snake case的混合来处理变量名和对象属性之类的东西。
我正在尝试制定一个我可以使用的正则表达式,它将识别所有的驼峰外壳字符串,然后能够用蛇外壳替换这些字符串。我正在努力的部分是在我拥有的条件下识别骆驼套弦。
识别哪些字符串是驼峰式的:在本文档中,所有驼峰式字符串都以小写字母,下划线或$开头,然后在字符串后面的某个时刻使用大写字母。例如:someCamelCasedString
& _someCamelCasedString
& $someCamelCasedString
。正则表达式需要考虑到我试图匹配的这些字符串中的一些可能是对象属性,因此它应该能够识别如下内容:Foo._someCamelCasedString.bar
或Foo[_someCamelCasedString].bar
答案 0 :(得分:3)
这标识了所有“严格”的驼峰案例(仅限字母)。他们以_
或$
还是foofoo
开头并不重要。
[a-z]+[A-Z][a-zA-Z]*
边缘情况是cameL
这是合适的骆驼案吗?我认为是,但我们可以改变它。
请参阅demo
如果你想允许字符串中的其他字符(数字等),那么我们可以在字符类中添加它们。因此,这是一个根据您的要求进行改进的起点。
例如,如果您知道自己对数字和下划线感到满意,可以使用:
[a-z]\w*?[A-Z]\w*
如果您还想在名称中允许使用美元(@Jongware说js字符串允许的字符),您可以使用:
[a-z][\w$]*[A-Z][\w$]*
然后有一个问题是什么构成了有效字符串的边界,所以我们可以设计一些锚点(可能是偷偷摸摸的前瞻,因为js不支持lookbehinds)以便避免误报。
答案 1 :(得分:1)
答案 2 :(得分:1)
/(?:^|\s|[^\w$])([a-z_$][a-zA-Z]*[A-Z][a-zA-Z]*)/gm