驼峰大小写转换器

把任意写法的标识符批量转成 camelCase、PascalCase、snake_case、kebab-case、CONSTANT_CASE 五种风格,缩略词与数字边界按固定规则切分,规则与结果逐行可核对。

打开页面即含演示值:上面五行结果由左侧示例实算得出,与下方对照表一致。

使用方法

  1. 把要转换的标识符粘进左框,每行一个(示例第 1 行是 HTTPServer)。
  2. 按 Ctrl+Enter(Mac 为 Cmd+Enter)或点「转 换」,右框按五种风格各输出一行。
  3. 多行输入时,同一风格行内以空格连接、顺序与输入一致,方便整列粘贴。
  4. 点「复制结果」把五种风格整块带走;点「载入示例」还原演示输入。
  5. 需要留档时用下方对照表的「导出对照表 CSV」(带 BOM,Excel 中文不乱码)。

驼峰大小写转换器能解决什么问题

同一份数据要在 MySQL 的 snake_case 列名、Java 的 camelCase 字段、C# 的 PascalCase 属性和前端请求里的 kebab-case 参数之间来回改名,手改大小写既慢又容易漏掉缩略词边界——HTTPServer 拆成 http_server 还是 h_t_t_p_server,每个团队吵过一次。驼峰大小写转换器用固定正则口径一次给出五种风格,十几行标识符整批转换,结果逐行可核对。

它只做风格互转,不做语义改名:想生成 URL 友好的中文标题转拼音 slug,用Slugify字符串工具;只想整体变大写小写,用字母转大写或字母转小写。

原理与规则说明

两遍边界正则。切分先用两条替换规则在词素之间插空格:/([a-z0-9])([A-Z])/g 处理「小写或数字紧接大写」的边界(response2JSON → response2 JSON),/([A-Z]+)([A-Z][a-z])/g 处理连续大写段的收尾(HTTPServer → HTTP Server)。最后按「非字母数字」切分得到词素数组。两条规则的顺序保证 HTTPServer 拆成 HTTP、Server 两段,而不是逐字母拆成 h_t_t_p_server。

边界口径的三处取舍。其一,数字并入前一词素:parse2JSON 得到 parse2、JSON,转出 parse2_json——数字被视为词的一部分,这与多数语言的标识符语法一致。其二,尾部缩略词同样拆开:mobileAPI 拆成 mobile、API 转出 mobile_api,与主流 snakeCase 实现口径一致;代价是 iOSApp 会拆成 i、OS、App 转出 i_os_app(见 FAQ)。其三,全大写词没有边界信息:HTTPSERVER 只能整体小写成 httpserver,正则没有可依据的落点。

五种输出映射。词素数组先统一转小写,再按目标风格重组:camelCase 首词素小写、其余首字母大写;PascalCase 全部首字母大写;snake_case 下划线连接(Python PEP 8 口径);kebab-case 连字符连接(URL 与 CSS 惯例);CONSTANT_CASE 下划线连接后全大写(环境变量与常量惯例)。同一份词素数组派生五种结果,保证互相之间逐词素一致。

完整示例(数值仅作演示)

默认五行输入 HTTPServer、response2JSON、user_profile_ID、mobileAPI、v2 的结果如结果区所示:snake_case 行是 http_server response2_json user_profile_id mobile_api v2,camelCase 行是 httpServer response2Json userProfileId mobileApi v2。这五行与下方对照表前 5 行逐字一致;点「载入示例」随时还原这组输入。

输入范围与对照表

输入按行处理,总长上限 5000 字符;每行应是英文字母、数字与分隔符(空格、下划线、连字符)的组合,中日韩字符会被整行拒绝。下表 16 行真实标识符全部由本页同一条算法实算,默认展示 12 行,点「加载更多」展开其余 4 行。

原始输入snake_casecamelCasekebab-casePascalCaseCONSTANT
HTTPServerhttp_serverhttpServerhttp-serverHttpServerHTTP_SERVER
response2JSONresponse2_jsonresponse2Jsonresponse2-jsonResponse2JsonRESPONSE2_JSON
user_profile_IDuser_profile_iduserProfileIduser-profile-idUserProfileIdUSER_PROFILE_ID
mobileAPImobile_apimobileApimobile-apiMobileApiMOBILE_API
parse2JSONparse2_jsonparse2Jsonparse2-jsonParse2JsonPARSE2_JSON
XMLHttp2Requestxml_http2_requestxmlHttp2Requestxml-http2-requestXmlHttp2RequestXML_HTTP2_REQUEST
OAuth2Tokeno_auth2_tokenoAuth2Tokeno-auth2-tokenOAuth2TokenO_AUTH2_TOKEN
myURLShortenermy_url_shortenermyUrlShortenermy-url-shortenerMyUrlShortenerMY_URL_SHORTENER
iOSAppi_os_appiOsAppi-os-appIOsAppI_OS_APP
app_store_idapp_store_idappStoreIdapp-store-idAppStoreIdAPP_STORE_ID
getHTTPResponseCodeget_http_response_codegetHttpResponseCodeget-http-response-codeGetHttpResponseCodeGET_HTTP_RESPONSE_CODE
user2Nameuser2_nameuser2Nameuser2-nameUser2NameUSER2_NAME

输入范围、边界与精度说明

输入规范化。输入先按 \r?\n 拆行、逐行 trim;总长超 5000 字符直接拒绝(避免一次性大文本卡住主线程);行内含中日韩字符时指出第几行并拒绝整次转换——大小写映射对这些文字无定义,强行输出只会得到原文。

输出边界。某行拆不出任何词素(纯符号或空行)会被跳过并在提示条报数;全部行都拆不出词素时报错而不是输出空串。单字符 x 的 PascalCase 是 X、其余风格保持 x,因为首字母大写只作用于首词素。词素重组时逐个 toLowerCase(),camelCase 非首词素用首字母大写 + 其余小写,所以 HTTP 这类全大写词素进入中位时会归一成 Http。

已知局限。iOSApp → i_os_app 不是缺陷而是口径:i 后接大写 O 符合边界规则,通用正则切分器(包括各语言的主流实现)同样如此;需要保形请把 iOS 手写成 ios 再转。全大写无分隔的词(HTTPSERVER)因缺少边界信号只能整体小写,本页不猜测切分点。

常见问题

HTTPServer 为什么拆成 http_server 而不是 h_t_t_p_server?

因为第二条边界正则 /([A-Z]+)([A-Z][a-z])/ 把连续大写段作为整体保留,只在「大写段 + 大写后跟小写」的收尾处切一刀,HTTP 保持完整。逐字母拆分是单字符边界的错误实现。

iOSApp 转出来是 i_os_app,是 bug 吗?

是口径而不是 bug:i 是小写、O 是大写,符合「小写接大写」的边界规则。主流通用转换器同此表现;在意保形就把 iOS 写成 ios 再转,得到 ios_app。

mobileAPI 为什么拆出 api?

本页对尾部缩略词同样按边界拆分(mobile、API → mobile_api),与主流 snakeCase 实现一致。这样 camelCase 的 mobileApi 再转回 snake 时口径闭合,不会出现两种结果。

全大写 HTTPSERVER 为什么只能得到 httpserver?

全大写没有大小写变化的落点,正则找不到边界信号。约定俗成的补救是先手工按下划线或驼峰写好再转,本页不做无依据的猜测切分。

parse2JSON 里的数字怎么处理?

数字并入前一词素:parse2 作为一个词素,转出 parse2_json。若你希望数字独立成段(parse_2_json),本页不提供该口径,请手工调整。

五种风格分别用在哪类代码里?

snake_case 用于 Python(PEP 8)与数据库列名,camelCase 用于 Java/JavaScript 变量(Google 风格指南),PascalCase 用于 C# 类名,kebab-case 用于 URL 路径与 CSS 类名,CONSTANT_CASE 用于环境变量与编译期常量。

为什么中文整行被拒绝而不是跳过?

中日韩文字没有大小写概念,转换后等于原样输出,容易让人误以为已经处理过。指出行号拒绝,是把问题留在转换前而不是污染结果。

输入的内容会上传吗?

不会。转换只调用字符串与正则方法,不发任何网络请求,可在开发者工具 Network 面板核对;刷新后输入清空。

相关工具