728x90
반응형

Javascript에서 정규식을 사용하는 경우가 자주 있는데 그때마다 잊어버리는 게 있다.

 

반복해서 정규식을 이용해 문자열을 찾는 경우가 있는데

 

항상 2번째에서는 다음과 같이 값이 나오지 않는 경우가 발생했다

let re = /ab/g;
let str = 'abc'
re.exec(str)
   ==> ["ab"]
re.exec(str)
   ==> null

이유는 RegExp가 상태 저장(stateful)을 하기 때문이다.

 

이를 위해 RegExp.lastIndex로 마지막으로 찾은 위치를 저장하는데

 

위의 예시에서는 처음 수행하면 ab를 찾아서 값이 2가 된다.

 

다음에 수행될 때는 마지막으로 찾은 위치부터 수행하기 때문에

 

문자열을 찾지 못하고 lastIndex는 0으로 리셋된다.

 

그래서 반복해서 정규식으로 문자열을 찾으려면 정규식을 수행한 이후에

 

항상 lastIndex를 0으로 설정해야 원하는 결과를 얻을 수 있다.

re.lastIndex = 0;

 

참고 문헌

  1. https://stackoverflow.com/questions/11477415/why-does-javascripts-regex-exec-not-always-return-the-same-value

  2. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec

  3. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex

반응형

'JS' 카테고리의 다른 글

[JS] video.js 자동 재생이 안될 때 해결 방법  (0) 2020.09.24
[JS] Electron으로 앱만들기  (0) 2020.08.13
[JS] PWA 만들기  (0) 2020.02.20
[JS] ejs SyntaxError  (0) 2020.01.25
[JS] Grunt Webpack 버전별로 빌드하기  (0) 2020.01.25

+ Recent posts