使用RegEx更改案例,其中字符串中可能包含数字

时间:2018-01-18 06:53:50

标签: javascript

我有这个函数将字符串转换为标题大小写

export function toTitleCase(text) {
  const result = text.replace(/([A-Z])/g, ' $1');
  return result.charAt(0).toUpperCase() + result.slice(1);
}

使用camelCase,结果是Camel Case。 结果是正确的。

使用camel23Case,结果是Camel23案例 我希望结果是Camel 23 Case

使用camelCASE,结果是Camel C A S E. 我希望结果是Camel CASE。

2 个答案:

答案 0 :(得分:2)

查找大写字母或数字的序列,并在它们之前添加空格。然后用大写版本替换第一个小写字母:

const toTitleCase = (text) => text
  .replace(/([A-Z]+|[0-9]+)/g, ' $1')
  .replace(/\b([a-z])/g, (m) => m.toUpperCase());

console.log(toTitleCase('camelCase'));
console.log(toTitleCase('camel23Case'));
console.log(toTitleCase('camelCASE'));

答案 1 :(得分:1)

试试这个正则表达式 - /((?<=[a-z])[0-9A-Z])|(?<=[a-z0-9])[A-Z]/g

function toTitleCase(text) {
  var regex = /((?<=[a-z])[0-9A-Z])|(?<=[a-z0-9])[A-Z]/g;
  const result = text.replace( regex, function(m){ return " " + m });
  return result.charAt(0).toUpperCase() + result.slice(1);
}

<强>演示

function toTitleCase(text) {
  var regex = /((?<=[a-z])[0-9A-Z])|(?<=[a-z0-9])[A-Z]/g;
  const result = text.replace(regex, function(m) {
    return " " + m
  });
  return result.charAt(0).toUpperCase() + result.slice(1);
}

console.log(toTitleCase("camel23Case"));

console.log(toTitleCase("camel23CASE"));

<强>解释

  • ((?<=[a-z])[0-9A-Z])匹配以下大写字母或字符(如果前一个字符是小写字母

  • 如果前一个字符是小写字母或数字,
  • (?<=[a-z0-9])[A-Z]仅匹配字母。