JavaScript: 정규표현식 Ep.2 (메소드, 플래그(옵션))

메소드


정규표현식을 다룬다.

  • test

    일치 여부(Boolean)를 반환한다.

    정규식.test(문자열)
    
    const str = `
    010-1234-5678
    thesoha@gmail.com
    https://soi-ha.github.io/
    The quick brown fox jumps over the lazy dog.
    abbcccdddd
    `
      
    const regexp = /fox/gi
    console.log(regexp.test(str)) // true
    
  • match

    일치 문자열의 배열(Array)을 반환한다.

    문자열.match(정규식)
    
  • replace

    일치 문자열을 새로운 문자열로 대체하고 그 대체된 결과를 문자열(String)로 반환한다.
    단, 원본 데이터는 손상시키지 않는다.

    문자열.replace(정규식,대체문자)
    
    • 그냥 replace 사용으로 원본파일 변경 X
      const str = `
      010-1234-5678
      thesoha@gmail.com
      https://soi-ha.github.io/
      The quick brown fox jumps over the lazy dog.
      abbcccdddd
      `
          
      const regexp = /fox/gi
      console.log(str.replace(regexp, 'AAA'))
      // 010-1234-5678
      // thesoha@gmail.com
      // https://soi-ha.github.io/
      // The quick brown AAA jumps over the lazy dog.
      // abbcccdddd
          
      console.log(str)
      // 010-1234-5678
      // thesoha@gmail.com
      // https://soi-ha.github.io/
      // The quick brown fox jumps over the lazy dog.
      // abbcccdddd
      
    • 원본파일 변경하는 방법
      let str = `
      010-1234-5678
      thesoha@gmail.com
      https://soi-ha.github.io/
      The quick brown fox jumps over the lazy dog.
      abbcccdddd
      `
          
      const regexp = /fox/gi
      str = str.replace(regexp, 'AAA')
      console.log(str)
          
      // 010-1234-5678
      // thesoha@gmail.com
      // https://soi-ha.github.io/
      // The quick brown AAA jumps over the lazy dog.
      // abbcccdddd
      

플래그(옵션)


const str = `
010-1234-5678
thesoha@gmail.com
https://soi-ha.github.io/
The quick brown fox jumps over the lazy dog.
abbcccdddd
`
  • g

    global의 약어로, 찾고자 하는 모든 문자를 찾는다.
    따라서, g 플래그를 붙이고 시작하는 경우가 많다.

    • g 플래그 X
       const regexp = /the/
       console.log(str.match(regexp))
      
       // ['the', index: 15, input: '\n010-1234-5678\nthesoha@gmail.com\nhttps://soi-ha.gi…ck brown fox jumps over the lazy dog.\nabbcccdddd\n', groups: undefined]
      
    • g 플래그 O
       const regexp = /the/g
       console.log(str.match(regexp))
      
       // (2) ['the', 'the']
      
  • i

    ignore case의 약어로, 영어의 대소문자를 구분하지 않고 검색하게 한다.
    플래그 i를 붙이지 않는다면 영어의 대소문자를 구분하여 검색한다.

    • i 플래그 X
      const regexp = /the/g
      console.log(str.match(regexp))
          
      // (2) ['the', 'the']
      
    • i 플래그 O
      const regexp = /the/gi
      console.log(str.match(regexp))
          
      //(3) ['the', 'The', 'the']
      
  • m

    multi line의 약어로, 특정한 문자 데이터 안에서 줄바꿈 처리가 되어져 있는 여러줄의 글자(문자)들을 고려하지 않고 검색한다.
    즉, 쉽게 말하자면 원래는 문자 데이터의 맨 첫줄 시작과 맨 마지막줄 끝만을 보고 검색했다.
    그러나, m 플래그를 사용함으로 문자 데이터 안에서 줄바꿈처리가 되어져있다면, 그 줄 하나하나의 처음과 끝, 처음과 끝을 찾아서 검색한다.

    기존 - 문자 데이터의 맨 처음과 끝만을 보고 검색한다.
    m 플래그 - 문자 데이터의 한줄 한줄의 처음과 끝으로 검색한다.

    • m 플래그 X

      m이라는 플래그를 사용하지 않으면 str 데이터의 가장 끝부분에서 마침표를 찾으려고 한다.
      하지만, 가장 마지막 줄 (7번째 라인 = 백틱이 있는 라인)에는 마침표가 없기 때문에 null이라는 값이 반환된다.

      console.log(str.match(/\.$/gi)) // null
      
    • m 플래그 O

      m 플래그를 사용하면, 해당 데이터에서 마침표로 끝나는 줄을 찾아서 반환한다.
      str 데이터에서 마침표로 끝나는 줄은 5번째 줄 (The quick …)

      console.log(str.match(/\.$/gim)) // ['.']
      
    • 이스케이프 문자(Escape Character)
      \(백슬래시) 기호를 통해 본래의 기능에서 벗어나 상태가 바뀌는 문자를 말한다.
      아래 예제에서 .(마침표)를 검색하고 싶을 때 /./으로 작성하면 안된다.
      정규표현식에서 마침표 하나는 특정한 문자를 검색하는 패턴이다. 그렇기에, 마침표를 검색하고 싶다면 \/.\로 작성해야 한다.
      이스케이프 문자는 모든 특수기호들이 사용가능한 것은 아니고 정규표현식에서 기능으로 해석이 되는 특수문자만 해당이 된다.
    • $ 의미
      $은 꼭 마침표 뒤쪽에 붙여야 한다.
      $ 앞에 있는 하나의 단어로 해당하는 줄이 끝나는 부분을 찾아서 끝나는 부분을 일치시킨다.
      해당 예제에서 끝나는 부분은 abbcccdddd줄이 아닌 그 다음줄의 백틱(`)기호가 있는 줄이다.

Comments