IT박스

Javascript PascalCase를 underscore_case로 변환

itboxs 2021. 1. 5. 07:50
반응형

Javascript PascalCase를 underscore_case로 변환


PascalCase문자열을 underscore_case문자열 로 어떻게 변환 할 수 있습니까? 점을 밑줄로 변환해야합니다.

예. 변하게 하다

TypeOfData.AlphaBeta

으로

type_of_data_alpha_beta

아래 단계를 시도 할 수 있습니다.

  • 모든 대문자를 캡처하고 앞의 선택적 점 문자도 일치시킵니다.

  • 그런 다음 캡처 된 대문자를 소문자로 변환 한 다음 돌아와서 함수를 _이전 문자로 바꿉니다. 이것은 교체 부품에서 익명 기능을 사용하여 달성됩니다.

  • 이것은 시작 대문자를 _+ 소문자로 대체합니다 .

  • 마지막으로 시작 밑줄을 제거하면 원하는 출력을 얻을 수 있습니다.

    var s = 'TypeOfData.AlphaBeta';
    console.log(s.replace(/(?:^|\.?)([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));
    

또는

var s = 'TypeOfData.AlphaBeta';
alert(s.replace(/\.?([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));

전체 단어가 대문자 일 때 그것을 멈추는 방법. 예. MotorRPMmotor_rpm대신 motor_r_p_m? BatteryAAAbattery_aaa대신 battery_a_a_a?

var s = 'MotorRMP';
alert(s.replace(/\.?([A-Z]+)/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));


str.split(/(?=[A-Z])/).join('_').toLowerCase();

천만에요

var s1 = 'someTextHere';
var s2 = 'SomeTextHere';

var o1 = s1.split(/(?=[A-Z])/).join('_').toLowerCase();
var o2 = s2.split(/(?=[A-Z])/).join('_').toLowerCase();

console.log(o1);
console.log(o2);


또는 lodash 사용 :

lodash.snakeCase(str);

예:

_.snakeCase('TypeOfData.AlphaBeta');
// ➜ 'type_of_data_alpha_beta'

Lodash는 많은 일상적인 js 작업에 대한 바로 가기를 제공하는 훌륭한 라이브러리입니다 . camelCase, kebabCase등과 같은 다른 유사한 문자열 조작 함수가 많이 있습니다 .


"alphaBetaGama".replace(/([A-Z])/g, "_$1").toLowerCase() // alpha_beta_gamma

문제 -인터페이스 요구 사항을 충족하거나 메타 프로그래밍을 위해 카멜 케이스 문자열 (예 : 속성 이름)을 밑줄 스타일로 변환해야합니다.

설명 이 행은 일치 된 결과를 리턴 할 수있는 정규식 기능을 사용합니다 (()의 첫 번째 쌍은 $1, 두 번째는 $2, 등).

문자열의 각 일치 항목은 _$1제공된 문자열 과 함께 앞에 밑줄이 표시되도록 변환 됩니다. 이 시점에서 문자열은 다음과 같습니다 alpha_Beta_Gamma.

대소 문자를 수정하기 위해 전체 문자열이 LowerCase ()로 변환됩니다.

toLowerCase는 상당히 비용이 많이 드는 작업이므로 각 match-case에 대한 루핑 처리기에 넣지 않고 전체 문자열에서 한 번 실행하는 것이 가장 좋습니다.

그 뒤에 toLowerCase결과 문자열은 alpha_beta_gamma(이 예에서)


이 솔루션은 위의 솔루션으로 비 후행 약어 문제를 해결합니다.

1175208 의 코드 를 Python에서 JavaScript 로 이식했습니다 .

자바 스크립트 코드

function camelToSnakeCase(text) {
    return text.replace(/(.)([A-Z][a-z]+)/, '$1_$2').replace(/([a-z0-9])([A-Z])/, '$1_$2').toLowerCase()
}

작업 예 :

camelToSnakeCase('thisISDifficult') -> this_is_difficult

camelToSnakeCase('thisISNT') -> this_isnt

camelToSnakeCase('somethingEasyLikeThis') -> something_easy_like_this

이것은 당신을 꽤 멀리 갈 것입니다 : https://github.com/domchristie/humps

"."를 바꾸려면 정규식 바꾸기를 사용해야 할 것입니다. 밑줄과 함께.


function toCamelCase(s) {
  // remove all characters that should not be in a variable name
  // as well underscores an numbers from the beginning of the string
  s = s.replace(/([^a-zA-Z0-9_\- ])|^[_0-9]+/g, "").trim().toLowerCase();

  // uppercase letters preceeded by a hyphen or a space
  s = s.replace(/([ -]+)([a-zA-Z0-9])/g, function(a,b,c) {
    return c.toUpperCase();
  });

  // uppercase letters following numbers
  s = s.replace(/([0-9]+)([a-zA-Z])/g, function(a,b,c) {
    return b + c.toUpperCase();
  });

  return s;
}

Try this function, hope it helps.


"TestString".replace(/[A-Z]/g, val => "_" + val.toLowerCase()).replace(/^_/,"")

replaces all uppercase with an underscore and lowercase, then removes the leading underscore.

ReferenceURL : https://stackoverflow.com/questions/30521224/javascript-convert-pascalcase-to-underscore-case

반응형