정규표현식에 대한 공부를 하려고 마음 먹고도 분량이 많다는 생각에 항상 복붙을 일삼은 날들을 후회하며 만드는 공식만이라도 이해하고 문법을 익혀보도록 한다.
16진수를 찾아라!!
1. 문자열 인자를 갖고 있는 배열에서 특정 16진수가 포함된 인자 값을 찾는다.
2. 각 문자열 내부에 16진수가 있다면 16진수를 찾아서 반환한다.
* 각 문자열 내부에는 16진수가 여러 개 있고 그 중의 특정 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)
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/
[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 |