将驼峰式字符串转换为 kebab 式字符串的正则表达式

2024-02-07

function hyphenate(str) {

  var replace = "-";
  str = str.toLowerCase().replace(/[\s_\b]/g, replace);

  console.log(str);
  return str;
}

hyphenate("This Is Hyphenate"); // this-is-hyphenate
hyphenate("camelCaseString");   // camel-case-string

我试图让我的代码生成第二个函数调用的结果,但尚未确定可以执行此操作的模式。任何帮助将不胜感激。


注意\b在你的[\s_\b]表示退格字符。不确定你真的需要这个。

使用 ECMAScript 2018 中引入的 Lookbehind 功能更新了答案:

const re = /[\W_]+|(?<=[a-z0-9])(?=[A-Z])/g;
const strs = ['camelCaseString','This      Is Hyphenate','This_Should_Hyphenate', '09Report'];
strs.forEach(str => 
  console.log( str.replace(re, "-").toLowerCase() )
);

The [\W_]+|(?<=[a-z0-9])(?=[A-Z])正则表达式将匹配

  • [\W_]+- 任何 1+ 个非单词和_ chars
  • | - or
  • (?<=[a-z0-9])(?=[A-Z])- 小写 ASCII 字母/数字和大写 ASCII 字母之间的位置。

旧答案

我会使用有点不同的逻辑:在单词内的每个大写字母之前添加连字符,然后替换并转为小写:

var re = /[\s_]+|([a-z0-9])(?=[A-Z])/g; 
var str = 'camelCaseString<br/>This      Is Hyphenate<br/>This_Should_Hyphenate';
var result = str.replace(re, "$1-").toLowerCase();
document.body.innerHTML += result;

解释:

  • [\s_]+- 一个或多个空格或下划线
  • | - or...
  • ([a-z0-9])-(第 1 组)小写字母或数字(自\B不会让我们在之后匹配大写字母_, add A-Z如果你想添加-每个大写字母之前)
  • (?=[A-Z])- 对大写 ASCII 字母的测试(不会被消耗,因为它(?=[A-Z])是一个前瞻,一个零宽度断言)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将驼峰式字符串转换为 kebab 式字符串的正则表达式 的相关文章

随机推荐