camelCase to dash - 彼此相邻的两个首都

sim*_*Pod 10 php regex camelcasing

我正在使用此函数将CamelCase转换为虚线字符串:

function camel2dashed($className) {
    return strtolower(preg_replace('/([^A-Z-])([A-Z])/', '$1-$2', $className));
}
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ers 31

使用先行断言:

function camel2dashed($className) {
    return strtolower(preg_replace('/([a-zA-Z])(?=[A-Z])/', '$1-', $className));
}
Run Code Online (Sandbox Code Playgroud)

看到它在线工作:ideone


Erg*_*wun 6

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

function camel2dashed($className) {
    return strtolower(preg_replace('/([A-Z])/', '-$1', $className));
}
Run Code Online (Sandbox Code Playgroud)

这仍然不会处理像@ sfjedi的"companyHQ" - >"company-hq"这样的情况.为此,您必须显式测试不应拆分的允许的大写子串,或指定一些通用规则(例如,不要在最后一个字符之前添加连字符).

您可以在此虚拟重复问题的答案中找到一些更复杂的替代方案.