我在 JavaScript/Node JS 程序中使用以下规则生成一些有意义的名称:
Input: "tenancy_account__accountPublicId__workspace__workspacePublicId__remove-user__userPublicId"
Expected output: "TenancyAccountAccountPublicIdWorkspaceWorkspacePublicIdRemove-userUserPublicId"
规则:
示例:
x | __*x => X
这是迄今为止尝试过的,寻找更好的替代品,如果有的话:
const convertBetterString = (input) => {
const finalString = [];
if (input && input.includes('_')) {
const inputStringSeparation = input.split('_');
if (inputStringSeparation.length > 1) {
if (inputStringSeparation[inputStringSeparation.length - 1] === '') {
inputStringSeparation.splice(inputStringSeparation.length - 1, 1);
}
inputStringSeparation.forEach((val, index) => {
if (val === '' && inputStringSeparation[index + 1]) {
const actualString = inputStringSeparation[index + 1];
const formattedString = actualString.charAt(0).toUpperCase() + actualString.slice(1);
finalString.push(formattedString);
}
});
return finalString.length > 0 ? finalString.join('') : inputStringSeparation.join('');
} else {
return input.charAt(0).toUpperCase() + input.slice(1);
}
} else {
return input;
}
}
最佳答案
拆分和切片
const capitalise = str => str.slice(0,1).toUpperCase() + str.slice(1); // you can add more tests
const str = "tenancy_account__accountPublicId__workspace__workspacePublicId__remove-user__userPublicId"
const newStr = str.split(/_+/)
.map(word => capitalise(word))
.join("")
console.log(newStr)
带有可选链接的正则表达式
const str = "tenancy_account__accountPublicId__workspace__workspacePublicId__remove-user__userPublicId_"
const newStr = str.replace(/(?:_+|^)(\w)?/g, (_,letter) => letter?.toUpperCase() ?? "")
console.log(newStr)
解释
(?:_+|^)
不捕获下划线或开始(\w)?
后跟要捕获的 0 或 1 个字母(_,letter) => letter?.toUpperCase() ?? "")
忽略匹配项,如果找到则大写字母,也忽略尾随下划线
关于javascript - JavaScript 正则表达式的复杂字符串操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70394177/