[정규식] 재미난? 정규식 Again #15 - 유니코드

· 5년 전 · 1233

한글 멘션을 할려고 하다 보면, 한글 초성 처리가 중요한것 같습니다.

 

아래는 냑에 있는 정규식 코드의 일부입니다.

 

[code]

matcher: function(flag, subtext, should_startWithSpace, acceptSpaceBar) {

    flag = flag.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");

    if (should_startWithSpace) {

        flag = '(?:^|\\s)' + flag;

    }

    _a = decodeURI("%C3%80");

    _y = decodeURI("%C3%BF");

    space = acceptSpaceBar ? "\ " : "";

    regexp = new RegExp(flag + "([가-힣ㄱ-ㅎA-Za-z" + _a + "-" + _y + "0-9_" + space + "\'\.\+\-]*)$|" + flag + "([^\\x00-\\xff]*)$", 'gi');

    match = regexp.exec(subtext);

[/code]

 

1. flag = flag.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");

  -, [, ], /, {, }, (, ), *, +, ?, ., \, ^, $, | 을 "\$&" 로 변경하는 것 같습니다.

2. 스페이스 시작하면 flag 에 ^ 또는 whitespace \s 를 flag 앞에 넣습니다.

    if (should_startWithSpace) {

        flag = '(?:^|\\s)' + flag;

    }

3. 에서  까지의 한글

    _a = decodeURI("%C3%80");

    _y = decodeURI("%C3%BF");

4. 스페이스를 포함하면 "\ " 아니면 empty ""

space = acceptSpaceBar ? "\ " : "";

5. ([가-힣ㄱ-ㅎA-Za-z" + _a + "-" + _y + "0-9_" + space + "\'\.\+\-]*)$|

를 정리하면 ([가-힣ㄱ-ㅎA-Za-z쎀-쎿0-9_\ \'\.\+\-]*)$|

6. ([^\x00-\xff]*)$  은 Ascii char 0x00 에서 0xff까지가 아닌것이네요.

 

대략 정리하면 아래와 같이 되겠네요

[code]

(?:^|\\s)([가-힣ㄱ-ㅎA-Za-z쎀-쎿0-9_\ \'\.\+\-]*)$|(?:^|\\s)([^\x00-\xff]*)$

[/code]

?:  ( )으로 그룹으로 지정하지 말라는 이야기 입니다.

^: 시작표시

|: OR

\s: whitespace입니다. Space, tab, line feed (newline), carriage return, form feed, and vertical tab

가-힣: 모든 한글

ㄱ-ㅎ: 초성

A-Z: 영문 대문자

a-z: 영문 소문자

0-9: 숫자

_, 스페이스, ', ., +,- 의 특수문자 중 하나입니다.

 

아래의 테스트글을 가지고 https://regex101.com/ 에서 테스트해보니

6번은 한글이 아닌 경우를 잡아 주는 것 같습니다.

앞부분이 한글, 영문, 숫자, 특수기호 조합을 잡아줍니다.

중간에 스페이스를 포함시킬지 말지에 따라 포함되고 안되고.

 

1번줄의 의미는 정확하게 모르겠습니다.

------------------------------

한글 테스트
test

t한글

0한글

닉_네.임'+_
你好
こんにちは

亞波治

------------------------------

 

질문 숫자와 특수기호만 빼고 모든 유니코드를 지원하는 정규식은?

 

추신: 1번줄의 의미를 알려주시면 감사하겠습니다. 

 

|
댓글을 작성하시려면 로그인이 필요합니다.

정규표현식

+
제목 글쓴이 날짜 조회
4년 전 조회 1,440
4년 전 조회 1,330
4년 전 조회 1,633
4년 전 조회 1,795
4년 전 조회 1,071
5년 전 조회 1,944
5년 전 조회 1,267
5년 전 조회 1,386
5년 전 조회 1,327
5년 전 조회 1,517
5년 전 조회 1,234
5년 전 조회 1,205
5년 전 조회 1,091
5년 전 조회 1,624
5년 전 조회 1,095
5년 전 조회 1,470
5년 전 조회 1,585
5년 전 조회 1,248
5년 전 조회 1,451
5년 전 조회 1,444
5년 전 조회 1,609
5년 전 조회 1,421
5년 전 조회 1,535
5년 전 조회 1,158
5년 전 조회 1,282
4년 전 조회 1,561
4년 전 조회 1,490
4년 전 조회 1,496
4년 전 조회 1,235
4년 전 조회 1,421
🐛 버그신고