let header=myWordDDam.
将以上单词转换为output =“我的单词DDam”。
使用正则表达式
let output=header.replace(/^./, header[0].toUpperCase()).split(/(?=[A-Z])/).join(" ");
但是输出是“ My Word D Dam” 如果连续使用大写,则卡住。如果有连续的大写字母,则仅当单词之间应有一个大写字母时,才应追加空格
答案 0 :(得分:2)
.split(/(?=[A-Z])/).join(" ")
部分匹配字符串中的所有位置,后跟一个大写字母,因此在每个位置之前都添加了空格。
您需要使用1个以上大写字母的大块,并在所有大块前添加一个空格。
因此,要解决当前的问题,可以将.split(/(?=[A-Z])/).join(" ")
替换为.replace(/(?!^)[A-Z]+/g,' $&')
。
let header = "myWordDDam";
let output = header.replace(/^./, m => m.toUpperCase()).replace(/(?!^)[A-Z]+/g,' $&')
console.log(output);
详细信息
.replace(/^./, m => m.toUpperCase())
-^.
匹配第一个字符并将其转换为大写字母.replace(/(?!^)[A-Z]+/g,' $&')
-匹配任意1个以上的大写ASCII字母(带有[A-Z]+
)(而不是字符串的开头-(?!^)
),并且文本被空格+整个整数替换匹配($&
。