JavaScript의 정규식 결과는 브라우저마다 다를 수 있습니다. 다음은 주요 5개 브라우저(IE, Firefox, Chrome, Safari, Opera, 현재 버전에 따름)의 정규식의 차이점을 나열해 보겠습니다. 그들을.
1. Firefox와 Chrome은 마치 JavaScript를 작성하는 사람들이 정규식 구성 및 할당을 작성할 것이라고 가정하는 것처럼 루프(및 그 안에 포함된 함수 정의) 내에 생성된 정규식을 과도하게 최적화합니다.
var r; for(var i = 0; i < 2; i++){ var x = /abc/g; if(r) // 第二个循环时Firefox和Chrome会输出“true” document.write(r == x); else r = x; }
2. 아무것도 반환하지 않을 수 있는 함수를 두 번째 매개변수로 바꾸기 메소드에 전달하면 IE는 일치하는 텍스트를 직접 삭제할 수 있습니다(이전 테스트에서는 제가 결론을 내렸습니다(Opera의 동작은 독특합니다). , 이는 현재 잘못된 결론인 것 같습니다), 다른 브라우저는 일치하는 텍스트를 "정의되지 않음"으로 대체합니다.
// IE会输出“13”,而其它浏览器输出“1undefined3” document.write('123'.replace(/2/, function(){}));
3. 새 RegExp 형식으로 정규식을 생성할 때 기존 정규식 인스턴스를 매개변수로 사용하면 대부분의 브라우저에서는 기본 기능은 동일하지만 완전히 독립적입니다. Safari는 단순히 정규식 인스턴스를 매개변수로 반환합니다.
var r = /1/; // Safari会输出“true”,而其它浏览器输出为“false” document.write(new RegExp(r) == r);
4. "빈" 정규식을 문자열로 직접 변환하면 IE 이외의 브라우저는 "/(?:)/"를 얻고 IE는 "//"를 얻습니다. 그러나 정규식에서 직접 소스 속성을 추출하면 빈 문자열만 얻게 됩니다.
// IE输出“//”,其它浏览器输出“/(?:)/” document.write(new RegExp('')); // IE输出“undefined”,其它浏览器输出“/(?:)/” document.write(eval('' + new RegExp('')))
5. 슬래시 "/"가 포함된 정규식을 문자열로 직접 변환하는 경우 "new RegExp('/')"를 예로 들면 Firefox 및 Opera만 "/ //", 소스 속성을 직접 추출하면 "/"가 표시되고, 다른 브라우저에서는 "///"가 표시되고, 소스 속성을 직접 추출하면 "/"가 표시됩니다.
// Firefox和Opera输出“/\//”,其它浏览器输出“///” document.write(new RegExp('/')); // Firefox和Opera输出“/\//”,其它浏览器输出“undefined” document.write(eval('' + new RegExp('/')))
6. 리터럴 표현식을 사용하여 정규식을 정의할 때 잘못된 옵션 플래그(예: "/abc/n")를 사용하는 경우 Chrome 및 Safari는 이 잘못된 옵션 플래그( "/abc/"와 동일). 이는 다른 브라우저에서 구문 오류를 발생시킵니다.
// Chrome和Safari会输出“/abc/”,其它浏览器中产生语法错误 document.write(/abc/n);
7. 생성자를 통해 정규식을 생성할 때 정규식에 대한 옵션 플래그를 지정하는 (두 번째) 문자열 매개 변수에 유효한 플래그가 아닌 문자가 포함되어 있으면 Firefox는 예외를 발생시키고 다른 브라우저는 잘못된 부분은 무시하세요.
// Firefox中会引起一个异常,提示无效的标志;而其它浏览器会输出“/1/ document.write(new RegExp('1', 'n')); ”
위 내용은 JavaScript 정규식의 브라우저 차이점에 대한 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!