zoukankan      html  css  js  c++  java
  • JavaScript正则表达式在不同浏览器中可能遇到的问题

    这两天在用正则表达式搞一个稍微有点复杂的东西,但是不同浏览器之间的差异可浪费了我不少的人参。

    现在我把正则表达式在五大主流浏览器(IE、firefox、Chrome、Safari、Opera,以当前版本为准)之间的差异整理一下罗列出来,给大家,也算给我自己做一个备忘。

    Firefox和Chrome会过度优化在循环中创建的正则表达式,似乎它们在假设写JavaScript的人会把正则表达式的构建和赋值写错地方。

    1 var r;

    2 for(var i = 0; i < 2; i++){

    3 var x = /abc/g;

    4 if(r)

    5 document.write(r == x); // 第二个循环时Firefox和Chrome会输出“true”

    6 else

    7 r = x;

    8 }

    如果你把一个有可能什么也不返回的函数作为第二个参数传递给replace方法,那么IE可能会直接删除匹配的文本(在之前的测试中我总结的是Opera的行为比较独特,现在看起来似乎是错误的结论),而其它浏览器则是会将匹配的文本替换成“undefined”。

    1 document.write('123'.replace(/2/, function(){})); // IE会输出“13”,而其它浏览器输出“1undefined3”

    如果使用new RegExp的形式创建正则表达式时使用一个已有的正则表达式实例作为参数,那么大部分浏览器都会创建一个基本功能相同,但完全独立的、全新的正则表达式实例;而Safari则会很干脆地返回作为参数的那个正则表达式实例。

    1 var r = /1/;

    2 document.write(new RegExp(r) == r); // Safari会输出“true”,而其它浏览器输出为“false”

    如果把一个“空”的正则表达式直接转化成字符串,IE以外的浏览器都会得到“/(?:)/”,而IE会得到“//”——但从正则表达式上直接提取source属性的时候,得到的都是空字符串。

    1 document.write(new RegExp('')); // IE输出“//”,其它浏览器输出“/(?:)/”

    2 document.write(eval('' + new RegExp(''))) // IE输出“undefined”,其它浏览器输出“/(?:)/”

    如果把一个包含斜线“/”的正则表达式直接转化成字符串——以“new RegExp('/')”为例,只有Firefox和Opera会得到“///”,并且直接提取source属性会得到“/”;而其它浏览器则会得到“///”,且直接提取source属性会得到“/”。

    1 document.write(new RegExp('/')); // Firefox和Opera输出“///”,其它浏览器输出“///”

    2 document.write(eval('' + new RegExp('/'))) // Firefox和Opera输出“///”,其它浏览器输出“undefined”

    如果在使用字面表达式来定义一个正则表达式时,使用了无效的选项标志(例如“/abc/n”),则Chrome和Safari会完全忽视此无效选项标志(等同于“/abc/”),而在其它浏览器会导致语法错误。

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

    暂时就这些吧,发现新的再补上。

    (转自:http://www.cr173.com/html/6822_1.html)

  • 相关阅读:
    宿主机无法访问CentOS7上Jenkins服务的解决办法
    415. Add Strings
    367. Valid Perfect Square
    326. Power of Three
    258. Add Digits
    231. Power of Two
    204. Count Primes
    202. Happy Number
    172. Factorial Trailing Zeroes
    171. Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/gisblogs/p/4196046.html
Copyright © 2011-2022 走看看