[vscode] 정규표현식으로 변수의 case 를 변환해보기 (lookahead, lookbehind 활용)

개요

우리의 목표는 아래 코드에서 모든 #define 한 녀석들을 Upper Case Snake Case 로 변환해보는 작업을 할 것입니다. 일일히 손으로 타이핑하여 수정하기에는 너무 오랜 시간이 걸리지요? 그래서 정규표현식을 이용하여 깔쌈하게 바꿔 볼 예정입니다. 바로 아래 나오는 소스코드를 바꿔볼 텐데요, 예를 들어 NoEventMask 라는 문자를 NO_EVENT_MASK 로 바꿔볼 것입니다. case를 변환시키는 작업은 vscode 의 기능을 활용하기 때문에 정규표현식의 치환 기능을 사용하지는 않습니다.

# define NoEventMask				(0L)
# define KeyPressMask				(1L<<0)
# define KeyReleaseMask				(1L<<1)
# define ButtonPressMask			(1L<<2)  
# define ButtonReleaseMask			(1L<<3)  
# define EnterWindowMask			(1L<<4)  
# define LeaveWindowMask			(1L<<5)  
# define PointerMotionMask			(1L<<6)  
# define PointerMotionHintMask		(1L<<7)  
# define Button1MotionMask			(1L<<8)  
# define Button2MotionMask			(1L<<9)  
# define Button3MotionMask			(1L<<10) 
# define Button4MotionMask			(1L<<11) 
# define Button5MotionMask			(1L<<12) 
# define ButtonMotionMask			(1L<<13) 
# define KeymapStateMask			(1L<<14)
# define ExposureMask				(1L<<15) 
# define VisibilityChangeMask		(1L<<16) 
# define StructureNotifyMask		(1L<<17) 
# define ResizeRedirectMask			(1L<<18) 
# define SubstructureNotifyMask		(1L<<19) 
# define SubstructureRedirectMask	(1L<<20) 
# define FocusChangeMask			(1L<<21) 
# define PropertyChangeMask			(1L<<22) 
# define ColormapChangeMask			(1L<<23) 
# define OwnerGrabButtonMask		(1L<<24) 

위 텍스트들을 아래로 바꿔보겠습니다.

# define NO_EVENT_MASK				(0L)
# define KEY_PRESS_MASK				(1L<<0)
# define KEY_RELEASE_MASK				(1L<<1)
# define BUTTON_PRESS_MASK			(1L<<2)  
# define BUTTON_RELEASE_MASK			(1L<<3)  
# define ENTER_WINDOW_MASK			(1L<<4)  
# define LEAVE_WINDOW_MASK			(1L<<5)  
# define POINTER_MOTION_MASK			(1L<<6)  
# define POINTER_MOTION_HINT_MASK		(1L<<7)  
# define BUTTON1_MOTION_MASK			(1L<<8)  
# define BUTTON2_MOTION_MASK			(1L<<9)  
# define BUTTON3_MOTION_MASK			(1L<<10) 
# define BUTTON4_MOTION_MASK			(1L<<11) 
# define BUTTON5_MOTION_MASK			(1L<<12) 
# define BUTTON_MOTION_MASK			(1L<<13) 
# define KEYMAP_STATE_MASK			(1L<<14)
# define EXPOSURE_MASK				(1L<<15) 
# define VISIBILITY_CHANGE_MASK		(1L<<16) 
# define STRUCTURE_NOTIFY_MASK		(1L<<17) 
# define RESIZE_REDIRECT_MASK			(1L<<18) 
# define SUBSTRUCTURE_NOTIFY_MASK		(1L<<19) 
# define SUBSTRUCTURE_REDIRECT_MASK	(1L<<20) 
# define FOCUS_CHANGE_MASK			(1L<<21) 
# define PROPERTY_CHANGE_MASK			(1L<<22) 
# define COLORMAP_CHANGE_MASK			(1L<<23) 
# define OWNER_GRAB_BUTTON_MASK		(1L<<24) 

케이스 종류

Case TypeExample
Original Variable as Stringsome awesome var
Camel CasesomeAwesomeVar
Snake Casesome_awesome_var
Kebab Casesome-awesome-var
Pascal CaseSomeAwesomeVar
Upper Case Snake CaseSOME_AWESOME_VAR

실제로 해보기

정규표현식의 lookbehind 기능을 사용하므로, 이게 뭔지 모르겠다면, 다음 글을 참조해주세요. 이 기능을 활용하여 1차적으로 문자열을 검사할 것입니다. 키보드 단축키는 리눅스 Visual Studio Code 기준이므로 알맞는 단축키를 사용하시기 바랍니다. 우선 Ctrl + F 로 조그만 검색 창을 활성화시킵니다. 그 다음 Alt + C 로 Case Sensitive 하게 만들어주고, Alt + R 로 정규식 기능을 켜 줍니다. 단축키를 모르겠다면 마우스로 클릭하여 설정해도 됩니다. 그렇게 되면 아래 이미지처럼 나옵니다.

Match Case, Using Regular Expressions 가 활성화된 모습.
  1. 자 이제 여기서 # define 뒤에 있는 영단어를 선택해봅시다.
    (?<=# define )\w+
  2. 이제 Command Palette (Ctrl + Shift + P)를 열어서 Select All Occurrences of Find Match (Ctrl + Shift + L) 를 실행합니다.
  3. 그럼 이제 검색된 문자열들이 모두 선택되었을 것입니다.
  4. 이제 다시 Command Palette 를 열어서 Transform to Snake Case 를 먼저 실행하고,
  5. 그 다음 Transform to Upper Case 를 실행합니다. 그럼 짜잔~ 완성되었씁니다.
바꾸는 과정

정말 간단하쥬?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to top