자바스크립트 정규식
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions

RegExp.prototype.exec()
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec

RegExp.prototype.test()
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test

//-----------------------------------------------------------------------------
exec(), test() : 
    -  g 없음 : 첫 결과만 리턴
    -  g 사용 : 같은 정규식 변수를 연속으로 사용시, 다음 호출에서는 다음 위치부터 검색, exec()와 test()가 다음 검색위치를 서로에게 영향을 줌

 


var str = 'qa';
var r = /a/;
console.log('11-test', r.test(str), r.test(str)); // true   true
console.log('11-exec', r.exec(str), r.exec(str)); //  ['a', index: 1, input: 'qa', ...]  ['a', index: 1, input: 'qa', ... ]

var r = /a/g; // g 플래그 사용
console.log('1g-test', r.test(str), r.test(str), r.test(str)); // true  false true  <=== 2번째 호출에서 false
console.log('1g-exec', r.exec(str), r.exec(str), r.exec(str)); // null   ['a', index: 1, input: 'qa', ...]   null  <===  test()에 영향 받음

var str = 'qa a';
var r = /a/;
console.log('21-test', r.test(str), r.test(str)); // true true
console.log('21-exec', r.exec(str), r.exec(str)); // ['a', index: 1, input: 'qa a', ...]   ['a', index: 1, input: 'qa a', ...]

var r = /a/g; // g 플래그 사용
console.log('2g-test', r.test(str), r.test(str), r.test(str), r.test(str)); // true true false true <===  여러 일치가 있으면 2번째 호출에서도 true
console.log('2g-exec', r.exec(str), r.exec(str), r.exec(str), r.exec(str)); // ['a', index: 3, input: 'qa a', ...]   null   ['a', index: 1, input: 'qa a', ...]    ['a', index: 3, input: 'qa a', ...] <===  2번째 호출에서 null

 

//-----------------------------------------------------------------------------

<  정규식 이용 함수  >
RegExp.prototype[@@match]() - g 플래그 사용시 모든 매칭 결과를 배열로 반환
    console.log('qaqa'.match(/a/)); // ['a', index: 1, input: 'qaqa', ...]  처음 찾은 결과 위치 정보
    console.log('qaqa'.match(/a/g)); // ['a', 'a']  모든 결과값의 배열

RegExp.prototype[@@matchAll]() - g 플래그 없으면 에러
RegExp.prototype[@@search]() -  g 와 상관없이 첫번째 찾은 위치 반환

RegExp.prototype[@@replace]() - g 없으면 1개만 변경
RegExp.prototype[@@split]() - 기본 g 있는 상태로 동작

 

 

 

 

//-----------------------------------------------------------------------------

더보기

< 참고 >
match() : g 플래그가 지정되면 모든 매칭 결과를 배열로 반환
search() : g 와 상관없이 첫번째 찾은 위치 반환

var str = 'qa';
var r = /a/;
console.log('11-search', str.search(r), str.search(r)); // 1  1
console.log('11-match', str.match(r), str.match(r)); // ['a', index: 1, input: 'qa', ...]  ['a', index: 1, input: 'qa', ... ]

var r = /a/g; // g 플래그 사용
console.log('1g-search', str.search(r), str.search(r)); // 1   1
console.log('1g-match', str.match(r), str.match(r)); // ['a']   ['a']

var str = 'qa a';
var r = /a/;
console.log('21-search', str.search(r), str.search(r)); //  1 1
console.log('21-match', str.match(r), str.match(r)); // ['a', index: 1, input: 'qa a', ...]   ['a', index: 1, input: 'qa a', ...]

var r = /a/g; // g 플래그 사용
console.log('2g-search', str.search(r), str.search(r)); //  1 1
console.log('2g-match', str.match(r), str.match(r)); //  ['a', 'a']    ['a', 'a']

 

반응형
Posted by codens