首页 > 解决方案 > 正则表达式:从camelCase中提取大写字母

问题描述

我想问任何更有经验的人regex他们将如何完成我的代码,以便它在每个前后都有小写字母的大写字母前面放置一个空格。

编码:camelCase.replace(/[a-zA-Z0-9][A-Z][a-zA-Z0-9]/g, match => { return " " + match})

例子:

const camelCase = "thisShouldBeSeparatedBySpace"

const wantedOutput = "this Should Be Separated By Space"

const currentOutput = "thi sShoul dBeSeparate dBySpace"

此外,正则表达式不应捕获电子邮件地址:

const email = "this.Is@NotSupposedToConvert.com"

const emailOutput = "this.Is@NotSupposedToConvert.com"

感谢您的任何想法!:)

标签: javascriptregex

解决方案


console.log(
  'thisShouldBeSeparatedBySpace => ',
  'thisShouldBeSeparatedBySpace'
    .split(/([A-Z][a-z0-9]*)/)
    .filter(item => (item !== ''))
    .join(' ')
);/*
console.log(
  'thisShouldBeSeparatedBySpace => ',
  'thisShouldBeSeparatedBySpace'
    .split(/((?<=[a-z0-9])[A-Z][a-z0-9]*)/)
    .filter(item => (item !== ''))
    .join(' ')
);

console.log(
  'this.Is@NotSupposedToConvert.com => ',
  'this.Is@NotSupposedToConvert.com'
    .split(/([A-Z][a-z0-9]*)/)
    .filter(item => (item !== ''))
    .join(' ')
);
console.log(
  'this.Is@NotSupposedToConvert.com => ',
  'this.Is@NotSupposedToConvert.com'
    .split(/((?<=[a-z0-9])[A-Z][a-z0-9]*)/)
    .filter(item => (item !== ''))
    .join(' ')
);*/
.as-console-wrapper { min-height: 100%!important; top: 0; }

编辑

由于 OP 确实改变了要求,人们可能会编写一个特定的清理函数,专门转换不具有任何非单词字符的字符串......

function sanitizeValidCamelCaseString(str) {
  str = String(str);
  return (/\W/g).test(str)
    ? str
    : str
      .split(/([A-Z][a-z0-9]*)/)
      .filter(item => (item !== ''))
      .join(' ');
}

console.log(
  "sanitizeValidCamelCaseString('thisShouldBeSeparatedBySpace') :",
  sanitizeValidCamelCaseString('thisShouldBeSeparatedBySpace')
);
console.log(
  "sanitizeValidCamelCaseString('this.Is@NotSupposedToConvert.com') :",
  sanitizeValidCamelCaseString('this.Is@NotSupposedToConvert.com')
);
.as-console-wrapper { min-height: 100%!important; top: 0; }


推荐阅读