camelCase to dash - 两个大写字母并排

Posted

技术标签:

【中文标题】camelCase to dash - 两个大写字母并排【英文标题】:camelCase to dash - two capitals next to each other 【发布时间】:2012-05-17 11:28:52 【问题描述】:

我正在使用这个函数将 CamelCase 转换为虚线:

function camel2dashed($className) 
    return strtolower(preg_replace('/([^A-Z-])([A-Z])/', '$1-$2', $className));

它有点工作,但是当我有前任时有问题。这个字符串:getADog。它返回get-adog,但我想要get-a-dog

我应该如何更改我的代码?谢谢

【问题讨论】:

您是否考虑过是否需要两个大写字母并排?例如,companyHQ 代表公司总部?你不会想要 company-h-q,对吧? 在这种情况下你是对的,但它不会发生。谢谢 这不是骆驼案。顺便说一句,这是 PascalCase。 【参考方案1】:

使用lookahead assertion:

function camel2dashed($className) 
    return strtolower(preg_replace('/([a-zA-Z])(?=[A-Z])/', '$1-', $className));

在线查看:ideone

【讨论】:

【参考方案2】:

如果您知道您的字符串不是以大写字母开头,则不需要前瞻断言来执行此操作,您只需在每个大写字母之前插入一个连字符,如下所示:

function camel2dashed($className) 
    return strtolower(preg_replace('/([A-Z])/', '-$1', $className));

这仍然无法处理@sfjedi 的“companyHQ”->“company-hq”之类的情况。为此,您必须明确测试不应该拆分的允许大写子字符串,或指定一些通用规则(例如,不要在最后一个字符之前添加连字符)。

您可以在virtual duplicate question 的答案中找到一些更复杂的替代方案。

【讨论】:

以上是关于camelCase to dash - 两个大写字母并排的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中拆分 CamelCase

sh Ubuntu Dash to Bash(和返回):更改默认shell环境(因为Dash是一个精简Bash)

sh Ubuntu Dash to Bash(和返回):更改默认shell环境(因为Dash是一个精简Bash)

sh Ubuntu Dash to Bash(和返回):更改默认shell环境(因为Dash是一个精简Bash)

ruby gists_to_dash_db.rb

Ubuntu 14.04 安装 Dash to Dock