상세 컨텐츠

본문 제목

[Javascript] 정규표현식 16진수 패턴 만들기

기술이 된 상상

by Indigo_Pure 2021. 3. 12. 17:09

본문

728x90
반응형

정규표현식에 대한 공부를 하려고 마음 먹고도 분량이 많다는 생각에 항상 복붙을 일삼은 날들을 후회하며 만드는 공식만이라도 이해하고 문법을 익혀보도록 한다.

 

오늘의 목표

16진수를 찾아라!!

 

1. 문자열 인자를 갖고 있는 배열에서 특정 16진수가 포함된 인자 값을 찾는다.

2. 각 문자열 내부에 16진수가 있다면 16진수를 찾아서 반환한다.

* 각 문자열 내부에는 16진수가 여러 개 있고 그 중의 특정 prefix가 붙은 16진수만 찾아야한다.

 

단계별 목표

  • 1단계 : 16진수 찾기
  • 2단계 : 특정 prefix의 16진수 찾기
  • 3단계 : prefix를 제외한 16진수 값 가져오기

1단계 : 16진수 찾기

String.prototype.match() 함수를 통해 정규표현식으로 찾는다.

 

[string].match(/0x\w{0,}/)

// 결과
//	문자열 0x 뒤에 문자 a부터 z, A부터 Z, 0부터 9까지 중 하나가 반복적으로 계속 오는 문자열

// 해석
// 	\w는 [A-Za-z0-9_]와 동일
//	{0,} 표현은 *와 동일. 
//		- 인자는 문자를 몇개 받을지 입력 {0부터, n까지}.
//		- 뒷자리를 입력하지 않으면 무한.

2단계 : 특정 prefix의 16진수 찾기

정규표현식 앞에 prefix 값을 입력하면 된다.

[string].match(/nid=0x\w{0,}/)

이미 이전에 0x를 붙임으로 알수 있는 내용이지만 특정 제목으로 붙어있는 상태인 경우를 예로 들었다.(like thread dump)

 

3단계 : prefix를 제외한 16진수 값 가져오기

문자열 내에 매칭이 되는 값을 찾았지만 필요한 값은 16진수 값이다.

정규표현식 내에서 특정한 내용을 가져오고 싶을 때는 포획 괄호(capturing parentheses)를 사용하면 된다.

[string].match(/nid=(0x\w{0,})/)

괄호 영역으로 지정한 부분은 함수의 리턴값의 특정 영역에 저장된다.

특정 영역 중 필요한 부분을 배열에서 가져오면 된다.

현재 16진수 값은 배열[2]에 입력되어 있다.

'asdfasdfnid=0xcffa   sdfasdf'.match(/(nid)=(0x\w{0,})/)
// return array
//	(3) ["nid=0xcffa", "nid", "0xcffa", index: 8, input: "asdfasdfnid=0xcffa   sdfasdf", groups: undefined]
//	[0] 정규표현식에 매칭된 값
//	[1~] 포획 괄호로 지정된 영역, 영역 갯수만큼 추가된다.
//	index 정규표현식으로 매칭된 값의 string 위치
//	input 대상이 되는 string 값
//	groups 포획 괄호를 지정할 때 이름을 지정할 수 있다. 이름을 지정하면 groups에 입력된다.

// groups 지정 예시

'asdfasdfnid=0xcffa   sdfasdf'.match(/(?<prefix>nid)=(0x\w{0,})/)
//	(3) ["nid=0xcffa", "nid", "0xcffa", index: 8, input: "asdfasdfnid=0xcffa   sdfasdf", groups: {…}]
//		0: "nid=0xcffa"
//		1: "nid"
//		2: "0xcffa"
//		groups: {prefix: "nid"}
//		index: 8
//		input: "asdfasdfnid=0xcffa   sdfasdf"
//		length: 3
//		__proto__: Array(0)

 

사용 정규표현 정리

  • 0x로 시작하는 16진수 정규표현식  /0x\w{0,}/
  • 영문(대문자, 소문자)+숫자 찾기 = \w or [A-Za-z0-9_]
  • 글자 갯수 지정 {n}, 갯수 범위 지정 {from, to}, 글자 갯수 무한 지정 {0,}
  • 포획 괄호 : 정규표현식 내 (), 포획 괄호 이름 지정 (?<이름>[표현식 부분])
  • 반환 값(배열) 내용
    • 첫번째 인자: 정규식 전체와 일치하는 string
    • 두번째 ~ 인자: 포획 괄호로 지정된 부분의 string (포획 괄호 갯수 만큼 배열 인자 차지)
    • 다음 인자: 정규식 전체와 일치하는 string의 시작 위치(key: index)
    • 그 다음 인자: 검색 대상이 되는 문자열(key: input)
    • 그그 다음 인자: 이름이 지정된 포획 괄호로 검색된 string(key: groups)

 

References

MDN 정규표현식 : developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions

MDN String match 내장함수 : developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/match

Javascript Tutorial: www.javascripttutorial.net/javascript-string-match/

728x90
반응형

'기술이 된 상상' 카테고리의 다른 글

[Javascript] String replace/replaceAll  (0) 2021.03.16
[Web] sessionStorage vs localStorage  (0) 2021.03.13
[Javascript] JSON stringify  (0) 2021.03.08
[Javascript]Execution Contexts  (0) 2020.06.09
이미지 파일 타입과 종류  (0) 2019.08.12

관련글 더보기