이 기사의 예에서는 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 중국어 사이트를 주목하세요!