当前位置: 首页 > news >正文

JS中的replace(RegExp, Function)

最近看Qwrap代码,查阅了一些关于replace里function参数的问题。

ECMScript文档里写的是

String.prototype.replace (searchValue, replaceValue)

如果 replaceValue 是函数,则对每个匹配的子字符串,以 m + 3 个参数调用这个函数。第一个参数是匹配的子字符串。如果 searchValue 是正则表达式,接下来 m 个参数是 MatchResult(见 15.10.2.1)里的所有捕获值。第 m + 2 个参数是发生的匹配在 string 里的偏移量,第 m + 3 个参数是 string。结果是将输入的原字符串里的每个匹配子字符串替换为相应函数调用的返回值(必要的情况下转换为字符串)得到的字符串。

http://ecmascript.cn/#387

 

 

runcode

<html> <body> <script> var QW={}; /** * @class Browser js的运行环境,浏览器以及版本信息。(Browser仅基于userAgent进行嗅探,存在不严谨的缺陷。) * @singleton * @namespace QW */ QW.Browser = (function() { var na = window.navigator, ua = na.userAgent.toLowerCase(), browserTester = /(msie|webkit|gecko|presto|opera|safari|firefox|chrome|maxthon|android|ipad|iphone|webos|hpwos)[ \/os]*([\d_.]+)/ig, Browser = { platform: na.platform }; ua.replace(browserTester, function(a, b, c) { var bLower = b.toLowerCase(); for(var i = 0;i < arguments.length;i++){    document.write("第"+(i+1)+"个参数的值:"+arguments[i]+"<br />");   } if (!Browser[bLower]) { Browser[bLower] = c; } }); if (Browser.opera) { //Opera9.8后版本号位置变化 ua.replace(/opera.*version\/([\d.]+)/, function(a, b) { Browser.opera = b; }); } if (Browser.msie) { Browser.ie = Browser.msie; var v = parseInt(Browser.msie, 10); Browser['ie' + v] = true; } return Browser; }()); if (QW.Browser.ie) { try { document.execCommand("BackgroundImageCache", false, true); } catch (e) {} } </script> </body> </html>

运行代码  [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

 

第一个参数得到的是匹配的整体字符串

然后依次的参数得到的是括号包括的子字符串

倒数第二个参数是字符串的偏移量

最后一个参数返回的是整个字符串。

 

https://developer.mozilla.org/zh-CN/docs/JavaScript/Reference/Global_Objects/String/replace

转载于:https://www.cnblogs.com/myzykj/archive/2013/02/22/2919115.html

相关文章:

  • 本机安装wamp后,非本机访问phpmyadmin Forbidden的 解决方法
  • Linux 中用 strace 追踪系统调用和信号值
  • [译]ECMAScript 6:对象字面量中的属性值简写
  • BeagleBone 教学视屏 -- 第一季
  • SQL Server 负载均衡、集群的解决方案!
  • CLR只记不看笔记(二) 生成、打包、部署和管理应用程序及类型
  • Nagios(二)——Nagios 的基本安装
  • 老五的心经 byod环境安全问题:描述职责
  • spring service事务传播
  • ubuntu硬件信息,内存DDR详细信息
  • 使用LWA和Lync模拟外部测试无边缘单前端环境
  • 继承(一)——使用继承构件类
  • poj 2060
  • Android实战技巧:深入解析AsyncTask
  • yum 及手动编译rpm包
  • 345-反转字符串中的元音字母
  • Apache Pulsar 2.1 重磅发布
  • gcc介绍及安装
  • Iterator 和 for...of 循环
  • Java新版本的开发已正式进入轨道,版本号18.3
  • mysql外键的使用
  • python3 使用 asyncio 代替线程
  • Spark RDD学习: aggregate函数
  • VUE es6技巧写法(持续更新中~~~)
  • vue-cli3搭建项目
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 番外篇1:在Windows环境下安装JDK
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 技术发展面试
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 详解NodeJs流之一
  • 用Canvas画一棵二叉树
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • #includecmath
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • $(function(){})与(function($){....})(jQuery)的区别
  • ( 10 )MySQL中的外键
  • (23)Linux的软硬连接
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (zt)最盛行的警世狂言(爆笑)
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (算法)前K大的和
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • .NET CLR基本术语
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器