我想在一組中的第一個大寫字母上拆分一個字串。
例如,FooBARBaz應該成為Foo BAR Baz.
我想出了:
str.replace(/[A-Z][a-z] /g, ' $&')
.replace(/[A-Z] /g, ' $&')
.replace(/\s /g, ' ')
.trim();
誰能建議更清潔的解決方案?
uj5u.com熱心網友回復:
一個簡單的正則運算式/([A-Z][a-z] )/g已經做到了......訣竅是捕獲組split在與方法一起使用時得到保留。因此,只需要選擇一個組模式(一個大寫字母后跟至少一個小寫字母)并免費獲得其余部分(一個有效的全大寫字母組)。并且由于拆分陣列還包含空字串值,因此需要運行一項額外的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; }
uj5u.com熱心網友回復:
您可以通過在方法中使用此replacer函式來實作此目的String.replace()。
現場演示:
const str = 'FooBARBaz';
function replacer() {
return ' ' arguments[0] ' ';
}
console.log(str.replace(/[A-Z][a-z] /g, replacer).trim());
uj5u.com熱心網友回復:
您可以嘗試匹配 upper,然后是 upper 或 upper not upper:
m = 'FooBARBazAB'.match(/([A-Z](?=[A-Z]|$)) |[A-Z][^A-Z]*/g)
console.log(m)
不確定這是如何“更清潔”的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/535562.html
上一篇:字串可選部分的正則運算式
