마

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

· 2020-08-05 (수) 02:52:50 · 1321

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

 

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

 

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

 

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

정규표현식

30건

+
제목 글쓴이 날짜 조회
21-06-04 조회 1,539
21-08-29 조회 1,431
21-06-24 조회 1,766
21-06-17 조회 1,938
21-06-09 조회 1,163
20-08-14 조회 2,055
20-08-11 조회 1,360
20-08-10 조회 1,473
20-08-09 조회 1,437
20-08-06 조회 1,595
20-08-05 조회 1,322
20-08-05 조회 1,291
20-08-05 조회 1,206
20-08-04 조회 1,721
20-08-04 조회 1,189
20-08-04 조회 1,552
20-08-03 조회 1,681
20-08-03 조회 1,344
20-08-03 조회 1,548
20-08-02 조회 1,532
20-08-02 조회 1,725
20-08-02 조회 1,517
20-08-01 조회 1,630
20-08-01 조회 1,237
20-08-01 조회 1,380
21-06-07 조회 1,665
21-06-04 조회 1,583
21-06-04 조회 1,609
21-06-04 조회 1,330
21-06-04 조회 1,553