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(/^_/, ""));
전체 단어가 대문자 일 때 그것을 멈추는 방법. 예.
MotorRPM
로motor_rpm
대신motor_r_p_m
? 나BatteryAAA
에battery_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
'IT박스' 카테고리의 다른 글
Android Lollipop 툴바 : 스크롤하는 동안 툴바를 숨기거나 표시하는 방법은 무엇입니까? (0) | 2021.01.05 |
---|---|
Android Studio : 드로어 블 폴더 : 여러 dpi에 이미지를 넣는 방법? (0) | 2021.01.05 |
ASP.NET Core의 OAuth 권한 부여 서비스 (0) | 2020.12.31 |
내가 "git push"하면 git은 이제 "Create pull request for…"라고 말합니다. (0) | 2020.12.31 |
Project.json 정의 dnx451 대 .dotnet (4.51) (0) | 2020.12.31 |