정규표현식 Regular Expression

GY·2021년 10월 5일
0

[JS] 개념 정리

목록 보기
19/32
post-thumbnail

🎊Regular Expression

문자열에 나타나는 특정 문자 조합과 대응시키기 위해 사용되는 패턴

  • 정규표현식 또한 객체이다

🎈정의 방식

1. 정규식 리터럴

const re = /ab+c/;

2. RegExp 객체의 생성자 함수 호출

var re = new RegExp("ab+c");

🎈정규식 패턴

Groups and ranges

Chracter
\|또는
()그룹
[]문자셋, 괄호안의 어떤 문자든
[^]부정 문자셋, 괄호안의 어떤 문가 아닐때
(?:)찾지만 기억하지는 않음

Quantifiers

Chracter
?없거나 있거나 (zero or one)
*없거나 있거나 많거나 (zero or more)
+하나 또는 많이 (one or more)
{n}n번 반복
{min,}최소
{min,max}최소, 그리고 최대

Boundary-type

Chracter
\b단어 경계
\B단어 경계가 아님
^문장의 시작
$문장의 끝

Character classes

Chracter
\특수 문자가 아닌 문자
.어떤 글자 (줄바꿈 문자 제외)
\ddigit 숫자
\Ddigit 숫자 아님
\wword 문자
\Wword 문자 아님
\sspace 공백
\Sspace 공백 아님

ex)
/gr[aed]y/ gr(a혹은 e혹은 d)y
[a-z]a부터z까지
[^a-z] a-z제외

gra?y a가 있거나 없는 경우
gra*y a가 없거나 있거나 많은 경우

\bya 단어 앞에 있는 ya
ya\b 단어 뒤에 있는 ya
ya\B 단어 뒤에 쓰이지 않는 ya




🎁 Problems

Exercise 3: Matching Characters

Task	Text
Match	can
Match	man
Match	fan
Skip	dan
Skip	ran
Skip	pan

[cmf]an

Exercise 9: Matching Whitespaces

Task	Text
Match	1.   abc
Match	2.	abc
Match	3.           abc
Skip	4.abc

\d\.\s+abc

Lesson 10: Starting and ending

Task	Text
Match	Mission: successful
Skip	Last Mission: unsuccessful
Skip	Next Mission: successful upon capture of target

^Mission: successful$

Lesson 11: Match groups

Task	Text	                         Capture Groups
Capture	file_record_transcript.pdf	 file_record_transcript
Capture	file_07241999.pdf	         file_07241999
Skip	testfile_fake.pdf.tmp

(^file_[a-z_0-9]+)

Lesson 12: Nested groups

Task	   Text	            Capture Groups
Capture	 Jan 1987	     Jan 1987 1987
Capture	 May 1969	     May 1969 1969
Capture	 Aug 2011	     Aug 2011 2011

([A-Za-z]+\s([0-9]+))

Lesson 13: More group work

Task	   Text	         Capture Groups
Capture	 1280x720	 1280 720
Capture	 1920x1600	 1920 1600
Capture	 1024x768	 1024 768

(\d{4})x(\d{3,4})




🎁 Additional Problems

Problem 1: Matching a decimal numbers

Task	Text
Match	I love cats
Match	I love dogs
Skip	I love logs
Skip	I love cogs

I love (cats|dogs)

Exercise 1: Matching Numbers

Task	Text
Match	3.14529
Match	-255.34
Match	128
Match	1.9e10
Match	123,340.00
Skip	720p

^-?\d+(,\d+)*(\.\d+(e\d+)?)?$

Problem 2: Matching phone numbers

Task	  Text	          Capture Groups
Capture	415-555-1234	  415
Capture	650-555-2345	  650
Capture	(416)555-3456	  416
Capture	202 555 4567	  202
Capture	4035555678	  403
Capture	1 416 555 9292

1?[\s-]?\(?(\d{3})\)?[\s-]?\d{3}[\s-]?\d{4}

Problem 3: Matching emails

Task	  Text	                                 Capture Groups
Capture	tom@hogwarts.com	                 tom
Capture	tom.riddle@hogwarts.com	                 tom.riddle
Capture	tom.riddle+regexone@hogwarts.com	 tom.riddle
Capture	tom@hogwarts.eu.com	                 tom
Capture	potter@hogwarts.com	                 potter
Capture	harry@hogwarts.com	                 harry
Capture	hermione+regexone@hogwarts.com           hermione

([a-z.]+)([+a-z]+)?@hogwarts.(eu.)?com

Problem 4: Matching HTML

Task	   Text	                                      Capture Groups
Capture	 <a>This is a link</a>	                    a
Capture	 <a href='https://regexone.com'>Link</a>	  a
Capture	 <div class='test_style'>Test</div>	        div
Capture	 <div>Hello <span>world</span></div>        div

\<(\w+)\>?

Problem 5: Matching specific filenames

Task	   Text	                  Capture Groups
Skip	   .bash_profile
Skip	   workspace.doc
Capture	 img0912.jpg	          img0912   jpg
Capture	 updated_img0912.png	  updated_img0912 png
Skip	   documentation.html
Capture	 favicon.gif	          favicon gif
Skip	   img0912.jpg.tmp
Skip	   access.lock

([a-z0-9_]+)\.(jpg|png|gif)$

첫번째 문자를 찾을 때 ^는 맨 앞에,
마지막 문자를 찾을 때 $는 맨 뒤에 붙인다.

🎠Problem 6: Trimming whitespace from start and end of line

Task	     Text	                     Capture Groups
Capture		 The quick brown fox...	     The quick brown fox...
Capture	   jumps over the lazy dog.	     jumps over the lazy dog. 

^\s*(.*)\s*$




📢reference

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions#special-negated-character-set
https://regexone.com/lesson/more_groups?
https://github.com/dream-ellie/regex#readme
https://www.youtube.com/watch?v=t3M6toIflyQ&t=184s

profile
Why?에서 시작해 How를 찾는 과정을 좋아합니다. 그 고민과 성장의 과정을 꾸준히 기록하고자 합니다.

0개의 댓글