> 웹 프론트엔드 > JS 튜토리얼 > JavaScript 정규식 브라우저 차이점

JavaScript 정규식 브라우저 차이점

黄舟
풀어 주다: 2016-12-20 15:47:57
원래의
1319명이 탐색했습니다.

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(&#39;123&#39;.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(&#39;&#39;)); 
// IE输出“undefined”,其它浏览器输出“/(?:)/”
document.write(eval(&#39;&#39; + new RegExp(&#39;&#39;)))
로그인 후 복사

5. 슬래시 "/"가 포함된 정규식을 문자열로 직접 변환하는 경우 "new RegExp('/')"를 예로 들면 Firefox 및 Opera만 "/ //", 소스 속성을 직접 추출하면 "/"가 표시되고, 다른 브라우저에서는 "///"가 표시되고, 소스 속성을 직접 추출하면 "/"가 표시됩니다.

// Firefox和Opera输出“/\//”,其它浏览器输出“///”
document.write(new RegExp(&#39;/&#39;)); 
// Firefox和Opera输出“/\//”,其它浏览器输出“undefined”
document.write(eval(&#39;&#39; + new RegExp(&#39;/&#39;)))
로그인 후 복사

6. 리터럴 표현식을 사용하여 정규식을 정의할 때 잘못된 옵션 플래그(예: "/abc/n")를 사용하는 경우 Chrome 및 Safari는 이 잘못된 옵션 플래그( "/abc/"와 동일). 이는 다른 브라우저에서 구문 오류를 발생시킵니다.

// Chrome和Safari会输出“/abc/”,其它浏览器中产生语法错误
document.write(/abc/n);
로그인 후 복사

7. 생성자를 통해 정규식을 생성할 때 정규식에 대한 옵션 플래그를 지정하는 (두 번째) 문자열 매개 변수에 유효한 플래그가 아닌 문자가 포함되어 있으면 Firefox는 예외를 발생시키고 다른 브라우저는 잘못된 부분은 무시하세요.

// Firefox中会引起一个异常,提示无效的标志;而其它浏览器会输出“/1/
document.write(new RegExp(&#39;1&#39;, &#39;n&#39;)); ”
로그인 후 복사

위 내용은 JavaScript 정규식의 브라우저 차이점에 대한 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿