>  기사  >  웹 프론트엔드  >  JS 정규식 수정자 global(/g) 사용 분석

JS 정규식 수정자 global(/g) 사용 분석

高洛峰
高洛峰원래의
2017-01-09 15:35:031476검색

이 기사의 예에서는 JS 정규식 수정자 전역(/g)의 사용법을 설명합니다. 참고용으로 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

/g 수정자는 전역 일치를 나타내며 첫 번째 일치를 찾은 후 중지하는 대신 모든 일치를 검색합니다. 먼저 고전적인 코드를 살펴보겠습니다.

var str = "123#abc";
var noglobal = /abc/i;//非全局匹配模式
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
var re = /abc/ig;//全局匹配
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出false
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出false

다음을 볼 수 있습니다. /g 모드를 사용할 때 RegExp.test의 출력 결과 ()를 여러 번 실행하면 차이가 있습니다.

정규식 개체를 생성할 때 "g" 식별자가 사용되거나 해당 ?global 속성 값이 true로 설정된 경우 새로 생성된 정규식 개체는 패턴을 사용하여 문자열을 전역적으로 일치시킵니다. 전역 일치 모드에서는 지정된 문자열에 대해 여러 일치 항목을 수행하여 찾을 수 있습니다. 각 일치 항목은 현재 일반 개체의 lastIndex 속성 값을 대상 문자열에서 검색을 시작하는 시작 위치로 사용합니다. lastIndex 속성의 초기값은 0이다. 일치하는 항목을 찾은 후 lastIndex 값은 문자열에서 일치하는 내용의 다음 문자의 위치 인덱스로 재설정되어 검색을 시작할 위치를 식별하는 데 사용됩니다. 다음 경기가 열릴 때. 일치하는 항목이 없으면 lastIndex 값이 0으로 설정됩니다. 일반 객체의 전역 일치 플래그가 설정되지 않은 경우 lastIndex 속성의 값은 항상 0이며, 일치가 수행될 때마다 문자열에서 첫 번째로 일치하는 항목만 찾습니다.

다음 코드를 통해 /g 모드에서 lastIndex의 성능을 확인할 수 있습니다.

var str = "012345678901234567890123456789";
var re = /123/g;
console.log(re.lastIndex); //输出0,正则表达式刚开始创建
console.log(re.test(str)); //输出ture
console.log(re.lastIndex); //输出4
console.log(re.test(str)); //输出true
console.log(re.lastIndex); //输出14
console.log(re.test(str)); //输出ture
console.log(re.lastIndex); //输出24
console.log(re.test(str)); //输出false
console.log(re.lastIndex); //输出0,没有找到匹配项被重置

위에서 RegExp.test() 함수에 대한 /g 모드의 영향을 확인했습니다. 이제 RegExp.exec() 함수에 미치는 영향을 살펴보겠습니다. RegExp.exec()는 일치하는 결과가 포함된 배열을 반환합니다. 일치하는 항목이 없으면 반환 값은 null입니다.

var str = "012345678901234567890123456789";
var re = /abc/;
//exec没有找到匹配
console.log(re.exec(str));//null
console.log(re.lastIndex);//0
var str = "012345678901234567890123456789";
var re = /123/;
var resultArray = re.exec(str);
console.log(resultArray[0]);//匹配结果123
console.log(resultArray.input);//目标字符串str
console.log(resultArray.index);//匹配结果在原始字符串str中的索引

RegExp.exec 메서드의 경우 g를 추가하지 않으면 횟수에 관계없이 첫 번째 일치 항목만 반환됩니다. g가 추가되면 첫 번째 실행도 첫 번째 일치 항목을 반환하고 두 번째 실행에서는 두 번째 일치 항목을 반환하는 식으로 진행됩니다.

var str = "012345678901234567890123456789";
var re = /123/;
var globalre = /123/g;
//非全局匹配
var resultArray = re.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出0
var resultArray = re.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出0
//全局匹配
var resultArray = globalre.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出4
var resultArray = globalre.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出11
console.log(globalre.lastIndex);//输出14

/g 일치 모드를 사용하면 루프를 통해 모든 일치 항목을 얻을 수 있습니다.

var str = "012345678901234567890123456789";
var globalre = /123/g;
//循环遍历,获取所有匹配
var result = null;
while ((result = globalre.exec(str)) != null)
{
 console.log(result[0]);
 console.log(globalre.lastIndex);
}

이 글이 JavaScript 프로그래밍에 종사하는 모든 분들께 도움이 되기를 바랍니다.

JS 정규식 수정자 global(/g) 사용 분석에 관한 더 많은 기사를 보려면 PHP 중국어 사이트를 주목하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.