자바스크립트 정규식(lookahead, lookbehind)

binary_j·2022년 12월 12일
0

하... 이번에는 정말 실수 없이 개발했다고 생각했는데 또 몰랐던 내용을 알게 되었다. 언제쯤 바보같은 실수를 안 하게 될지..
안드로이드에서는 잘 동작하던 소스가 iOS에서는 동작하지 않았다.
알고 보니 잘못된 정규식 때문이었다.
이 기회에 lookahead 정규식과 lookbehind 정규식을 정리해 보려고 한다.


lookahead 정규식

  • positive lookahead : X(?=Y)
    X보다 뒤에 있는 문자열에 Y가 있는 경우 X

  • negative lookahead : X(?!Y)
    X보다 뒤에 있는 문자열에 Y가 있지 않은 경우 X


lookbehind 정규식

  • positive lookbehind : (?<=Y)X
    X보다 앞에 있는 문자열에 Y가 있는 경우 X

  • negative lookbehind : (?<!Y)X
    X보다 앞에 있는 Y가 있지 않은 경우 X


바로 이 lookbehind가 문제였다.
사파리나 익스플로러같은 웹 브라우저는 lookbehind 정규식을 지원하지 않는다고 한다. 그래서 lookahead 정규식으로 대체하는 방법으로 문제를 해결하였다.
이 외에도 정규식은 잘못 사용하면 속도가 엄청 느려지기도 하고.. 문제가 발생할 수 있으니 꼭 체크를 하고 사용해야겠다.


[정규식 체크할 때 도움이 될 만한 자료들]

정규식 validator
https://github.com/validatorjs/validator.js
https://express-validator.github.io/docs/

정규식 analizer
https://github.com/davisjam/safe-regex
https://www.cs.bham.ac.uk/~hxt/research/rxxr2/


Reference

0개의 댓글