테스트 사이트 - 개발 중인 베타 버전입니다

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

· 5년 전 · 1391

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

 

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

 

[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번줄의 의미를 알려주시면 감사하겠습니다. 

 

댓글 작성

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

로그인하기

게시글 목록

번호 제목
11251
11250
11249
11246
11245
11240
11239
11238
11233
11208
11187
11186
11185
11183
11179
11178
11177
11157
11152
11149
11148
11143
11142
11141
11140
11135
11126
11113
11104
11097