首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CamelCase2snake_case()

CamelCase2snake_case()
EN

Code Golf用户
提问于 2016-04-22 07:13:10
回答 7查看 1K关注 0票数 16

编写一个函数将CamelCased文本转换为snake_case:FunctionForHTMLManipulation变为function_for_html_manipulation

在许多语言中,输入文本将是一个合适的标识符。它必须以英文字母开头,然后后面跟着任意数量的英文字母或数字。没有其他字符(空格、符号等)是允许的。

CamelCased文本中的每个“单词”将以大写字母开头,除非在文本开头或紧跟在一个数字之后,并且后面跟着零个或多个字母,这都是相同的情况。数字组将被视为单独的单词,但通过时没有变化。

换句话说,小写字母后跟大写字母表示单词中断。相邻的任何字母和数字都表示单词中断。大写字母后面跟着另一个大写字母,小写字母表示单词中断。

...lU... => ...l_u...

...l9... => ...l_9...

...U9... => ...u_9...

...9l... => ...9_l...

...9U... => ...9_u...

...UUl... => ...u_ul...

Buy24Beersbuy24beers都变成了buy_24_beers

MacDonaldAndObrian变成mac_donald_and_obrian

MACDonaldAndOBrian变成mac_donald_and_o_brian

EN

回答 7

Code Golf用户

发布于 2016-04-22 13:10:32

JavaScript (ES6),79字节

代码语言:javascript
复制
s=>s.match(/[A-Z]+(?=[A-Z][a-z]|\d|$)|[A-Z]?[a-z]+|\d+/g).join`_`.toLowerCase()
票数 6
EN

Code Golf用户

发布于 2016-04-22 07:55:13

JavaScript (ES6),89字节

代码语言:javascript
复制
s=>s.replace(/\d(?=\D)|\D(?=\d)|[a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z])/g,"A2_").toL‌​owerCase()
票数 3
EN

Code Golf用户

发布于 2018-12-23 01:30:41

Lua,135个字节

代码语言:javascript
复制
function snake(s)return s:gsub('%f[^%l]%u','_%1'):gsub('%f[^%a]%d','_%1'):gsub('%f[^%d]%a','_%1'):gsub('(%u)(%u%l)','%1_%2'):lower()end

在网上试试!

该解决方案得益于Lua对C的字符类(小写%l、大写%u、字母%a、数字%d)和边框表示法(%f[])的简写表示法,以及在没有任何其他捕获的情况下作为隐式第一捕获添加的整个匹配。

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/78239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档