RegExp#exec() 가 돌려주는 배열에는 undefined 가 포함되어 있을지도 모른다
const result = /a(b)?/.exec('a');
const { length } = result; // 2
const [matched, capture1] = result; // "a", undefined
groups
는 명명된 캡처를 사용하지 않으면 undefined
그래서 좋다고 해서, result[1]
가 undefined
네요.다만, 이 정도 단순한 경우, 쓰는 방법을 바꾸면 그것을 회피할 수 있습니다.
const result = /a(b?)/.exec('a');
const { length } = result; // 2
const [matched, capture1] = result; // "a", ""
이 동작의 차이는 0자를 캡처한 그룹과 원래 적용되지 않은 그룹의 차이입니다.
?
또는 *
, |
에 의해 건너뛴 그룹을 캡처할 수는 없습니다.그 경우,
RegExp#exec()
의 배열의 요소수는 변하지 않고, undefined
가 대입됩니다 1이 거동은 ES5 시점부터 변함없이 사양으로 정해져 있습니다 .
MDN(영어판)에도 쓰지 않은 거동 2 그래서
RegExp#exec()
이나 String#replace(regex, replaceFunction)
로 건너뛰는 캡처 그룹은 기술하지 않는 편이 혼란이 줄어들 것입니다.그러나 매우 오래된 일부 브라우저 (IE 포함)는 undefined가 아닌 ""입니다. . ↩
영어권이라면 블로그라든지에서는 얼른 기술되어 있지만, 일본어권에서는 전무. 왜냐하면 빠지기 쉬운 함정이지만 MDN에 쓰여지지 않은 것은 어떨까요 ↩
Reference
이 문제에 관하여(RegExp#exec() 가 돌려주는 배열에는 undefined 가 포함되어 있을지도 모른다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sega_yuu/items/55b5bb06e291d933e0a6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)