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

现在我把正则表达式在五大主流浏览器(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)

JavaScript正则表达式在不同浏览器中可能遇到的问题的更多相关文章

  1. JavaScript权威指南--WEB浏览器中的javascript

    知识要点 1.客户端javascript window对象是所有客户端javascript特性和API的主要接入点.它表示web浏览器的一个窗口或窗体,并且可以用window表示来引用它.window ...

  2. javascript解决在safari浏览器中使用history.back()返回上一页后页面不会刷新的问题

    我们知道,在JavaScript中提供了一个window.history.back()方法用于返回上一页,另外也可以使用window.history.go(-1)返回上一页(跳转). 在其他的主流浏览 ...

  3. 使用 JavaScript 拦截和跟踪浏览器中的 HTTP 请求

    HTTP 请求的拦截技术可以广泛地应用在反向代理.拦截 Ajax 通信.网页的在线翻译.网站改版重构等方面.而拦截根据位置可以分为服务器端和客户端两大类,客户端拦截借助 JavaScript 脚本技术 ...

  4. JavaScript正则表达式的浏览器的差异

    JavaScript中的正则表达式在不同的浏览器中得到的结果可能会有差异,下面把正则表达式在五大主流浏览器(IE.Firefox.Chrome.Safari.Opera,以当前版本为准)之间的差异整理 ...

  5. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  6. 浏览器中Javascript单线程分析

    线程这个特性对于一门语言环境来说是尤其重要的,在Java/C++环境下都提供了多线程API操作. 但在Javascript中据说代码执行时单线程的,大量计算的逻辑会阻塞浏览器HTML渲染,但setTi ...

  7. 第十一章:WEB浏览器中的javascript

    客户端javascript涵盖在本系列的第二部分第10章,主要讲解javascript是如何在web浏览器中实现的,这些章节介绍了大量的脚本宿主对象,这些对象可以表示浏览器窗口.文档树的内容.这些章节 ...

  8. 浏览器中的XML与JavaScript

    浏览器中的XML与JavaScript 在处理XML前,你需要在JavaScript中获取它.这一部分展示了一些不同的方法用来在JavaScript中获取XML并且对它进行处理. XML的节点类型 在 ...

  9. 浏览器中JavaScript执行原理

    本章我们讨论javascript在浏览器中是如果工作的,包括:下载.解析.执行的全过程.javascript的这些讨人嫌的地方我们是知道的: i.需要串行下载 ii.需要解析 iii.需要串行执行 而 ...

随机推荐

  1. python assert 断言语句的作用

    python assert 断言语句的作用 assert语句的应用场景 使用assert语句是一个很好的习惯. 我们在编写代码的时候, 不知道程序会在什么时候崩溃, 与其让它在深度运行时崩溃, 不如预 ...

  2. scrapy主动触发关闭爬虫

    在spider中时在方法里直接写 self.crawler.engine.close_spider(self, 'cookie失效关闭爬虫')   在pipeline和downloaderMiddle ...

  3. 洛谷P3379倍增LCA

    传送门 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> ...

  4. 2018ACM/ICPC 青岛现场赛 E题 Plants vs. Zombies

    题意: 你的房子在0点,1,2,3,...,n(n<=1e5)点每个点都有一颗高度为0的花,浇一次水花会长a[i]. 你有一个机器人刚开始在你家,最多走m步,每一步只能往前走或者往后走,每走到一 ...

  5. 阿里云对象存储 OSS,不使用主账号,使用子账号来访问存储内容

    https://help.aliyun.com/document_detail/31932.html?spm=5176.doc31929.2.5.R7sEzr 这个示例从一个没有任何Bucket的阿里 ...

  6. Java编程的逻辑 (16) - 继承的细节

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  7. ddmlib问题总结——同步获取设备信息

    通过IDevice.getProperty(String name)得到响应的设备属性.在实际的使用过程中发现,我的manufacturer总是获取不到,为null(获取代码如下),而剩下的属性都可以 ...

  8. zabbix】问题 Time zone for PHP is not set (configuration parameterdate.timezone)

    https://blog.csdn.net/jing875480512/article/details/79002404

  9. Amazon电商数据分析——数据获取

    最近一段时间主要重心在Amazon电商数据分析上,这是一个偏数据分析和可视化的项目.具体来说就是先获取Amazon的商品数据,数据清洗和持久化存储后作为我们自己的数据源.分析模块和可视化模块基于数据进 ...

  10. 000 Html基本标签与案例

    在CSS之前,需要先介绍一下HTML的常用标签. 1.html与css的关系 2.程序 <!DOCTYPE HTML> <html> <head> <meta ...