javascript - JavaScript 正则表达式的复杂字符串操作

标签 javascript regex

我在 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/

    相关文章:

    javascript - 在 javascript 对象中, "static"函数和原型(prototype)函数是否共享相同的命名空间?

    MySQL字符串替换

    javascript - 使用 JavaScript 匹配 URL 中的最后一个单词

    Javascript - 替换所有数字标签

    javascript - 在 Javascript 中,如何将字符串的 "tags"放入数组中?

    javascript - FullCalendar 日期格式

    javascript - 正则表达式字符恰好出现两次

    javascript - 如何仅在淡入倒计时计数器后调用游戏开始方法?

    javascript - 在javascript中将字节数组转换为字符串

    regex - Inno Setup 中字符串的正则表达式