我想在一个组的第一个大写字母上分割一个字符串。
例如,FooBARBaz应该变成Foo BAR Baz。
我想出了:
str.replace(/[A-Z][a-z]+/g, ' $&')
.replace(/[A-Z]+/g, ' $&')
.replace(/\s+/g, ' ')
.trim();有人能提出一个更清洁的解决方案吗?
发布于 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任务。
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(' ')
);.as-console-wrapper { min-height: 100%!important; top: 0; }
https://stackoverflow.com/questions/74459067
复制相似问题