首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用单次替换转换成对重定位替换

用单次替换转换成对重定位替换
EN

Stack Overflow用户
提问于 2022-11-16 10:43:05
回答 3查看 59关注 0票数 2

我想在一个组的第一个大写字母上分割一个字符串。

例如,FooBARBaz应该变成Foo BAR Baz

我想出了:

代码语言:javascript
复制
str.replace(/[A-Z][a-z]+/g, ' $&')
    .replace(/[A-Z]+/g, ' $&')
    .replace(/\s+/g, ' ')
    .trim();

有人能提出一个更清洁的解决方案吗?

EN

Stack Overflow用户

回答已采纳

发布于 2022-11-16 13:12:03

/([][]+)/g这样的简单正则表达式已经实现了.技巧是 https://javascript.info/regexp-groups ,它在与 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split#description 方法一起使用时会被保存下来。因此,您只需要使用一个组模式(一个大写字母后面至少有一个小写字母),并免费获得其余的(一个有效的所有大写字母组)。另外,由于拆分数组还包含空字符串值,因此需要运行额外的filter任务。

代码语言:javascript
复制
console.log(
  'just split ...\n',
  '"FooBARBazBizBuzBOOOOZBozzzBarFOOBARBazbizBUZBoooozBOZZZBar" =>',

  'FooBARBazBizBuzBOOOOZBozzzBarFOOBARBazbizBUZBoooozBOZZZBar'
    .split(/([A-Z][a-z]+)/g)
);
console.log(
  'split and filter ...\n',
  '"FooBARBazBizBuzBOOOOZBozzzBarFOOBARBazbizBUZBoooozBOZZZBar" =>',

  'FooBARBazBizBuzBOOOOZBozzzBarFOOBARBazbizBUZBoooozBOZZZBar'
    .split(/([A-Z][a-z]+)/g)
    .filter(val => val !== '')
);
console.log(
  'split, filter and join ...\n',
  '"FooBARBazBizBuzBOOOOZBozzzBarFOOBARBazbizBUZBoooozBOZZZBar" =>\n',

  'FooBARBazBizBuzBOOOOZBozzzBarFOOBARBazbizBUZBoooozBOZZZBar'
    .split(/([A-Z][a-z]+)/g)
    .filter(val => val !== '')
    .join(' ')
);
代码语言:javascript
复制
.as-console-wrapper { min-height: 100%!important; top: 0; }

票数 4
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74459067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档