EasyClick 老鬼 编程学院
EasyClick 老鬼 编程学院
老鬼编程学院VIP 教程汇总
EasyClick 教程
原生UI 教程展示
原生UI 教程总纲
原生UI VIP 教程目录
原生UI 模版展示
模版一
模板二
模板三
模板四(暂未完成只有界面数据未处理)
模板 悬浮窗 获取点击坐标
模板 进度条
模板 搜索框
模板 卡密验证
模板 登录界面
模板 登录 主页联动
模板 浮窗启停
模板 运行模式检测
模板 搜索模板美化
模板 日期时间模版
模板 动态排版之加载三方应用列表
模板 UI执行 脚本任务显示
模板 旋转特效启停浮窗按钮加UI假启动
模板 对话框大全
模板 自定义对话框大全
模板 复用xml 高级对话框
模板 自定义listview
模板 浮窗日志
模版 自定义悬浮启停按钮
模版 脚本休息全屏
模板 SeekBar组件
模板 任务首页
模版 圆角悬浮窗日志
坐标拾取器
卡片分组模版
模板 定时任务
模板 自定义菜单多页面切换
模板 viewpager 抖音脚本界面
模板 可编辑表格
模板 侧边悬浮菜单弹窗
登录模版 字体引入
番外避坑
EasyClick 原生UI 避坑指南
商用模板
商用模版一
商用模板二
商用模板三
商用模板四
商用模板五
商用模板六
商用模板七
商用模版八(徒弟作品)
商用模版九
商用模版十
商用模版十一(游戏)
商用模版 十二 (小游戏阅读)
商用模版 十三 (小游戏阅读)
商用模版 十四(小游戏)
商用模版 十五(TK)
商用模版十六 (DY)
商用模版十七(徒弟作品)
原生UI xml文件 标签解释
原生UI教程xml扫盲篇
EasyClick 原生UI与Android UI XML的区别
原生UI 之常用控件一
原生UI 之常用控件二
原生UI 公有属性
原生UI之布局
XML 特殊符号转义
原生UI 学习思路
EasyClick auto.js对比
原生和H5的对比
JavaScript基础教程
JavaScript基础教程
JavaScript调用java函数
JavaScript 调用java函数检测服务器连通性
JavaScript中的正则表达式总结
JavaScript 异常处理(try+catch+finally+throw)
常用数据类型检测结果表
JavaScript 常见问题集锦
JavaScript调用java函数获取MP3文件时长
JavaScript判断变量类型
JavaScript 提取数字
JavaScript 正则Replace方法
JavaScript 运算符使用技巧
JavaScript 字符串 转数组
JavaScript取整取余数的方法
JavaScript 数组随机取值
JavaScript 随机生成汉字
JSON 基础
JavaScript 随机生成字符串
JavaScript 正则 常用写法
EasyClick Android相关教程
ADB shell 之 adb shell之am、pm、dpm命令大全
EasyClick adb、shell命令大全
EasyClick 执行 shell命令
EasyClick shell 命令压缩文件
EasyClick shell分割大文件
Android Intent action 介绍
Android FLAG标志位解释
EasyClick Intent 打开应用详情页
EasyClick intent方式安装卸载APP
Intent教学培训
Activity
Android
安卓 版本API 对照表
Java零基础教程展示
EasyClick Android常用文档
EasyClick 常见错误
常见网络返回代码解释
模拟器连接端口汇总
EasyClick官网文档
EC无法停止的问题
模拟器自动获取root权限
夜神截图黑图解决办法
去除Windows文件^M的办法
EC设置为默认输入法
EasyClick 启动APP 替代方法
EasyClick 插件项目问题
EasyClick 热更乱码问题
EasyClick IEC 热更新 问题
EC 编译错误
打包选项和APP 设置属性对比
常用时间戳API
雷电模拟器开启指针
无障碍音量下键停止脚本
EasyClick IOS 常见问题
EasyClick IOS 2.X 环境安装 教程
EasyClick 黑苹果安装教程、资源、坑点处理
MAC OS Monterey 支持机型列表
工作室环境问题
XCODE签名问题
Windows10 系统盘 节省7G以上
EasyClick 远程调试内网穿透工具
IDEA 教程
EasyClick IDEA 教程
EasyClick IDEA 汉化
IDEA 常用快捷键
IDEA 常用开发插件
IDEA 创建多项目
IDEA 恢复历史记录
IDEA 常见问题
EasyClick 安卓Intent URL scheme VIP 教程
付费产品
EasyClick Android 自动化测试 ROM定制
EasyClick bug反馈工具 OSS版
卡密管理系统
卡密二次验证系统
EasyClick BUG 反馈 公共版
云控定制
设备购买
二手手机资源
Android 一手新机货源表
IOS推荐集线器西普莱厂家直供集线器
本文档使用 MrDoc 发布
-
+
首页
JavaScript 正则Replace方法
# JavaScript 正则Replace方法 一、 JS正则的创建有两种方式: `new RegExp() `和 直接字面量。 ```js //使用RegExp对象创建 var regObj = new RegExp("(^\s+)|(\s+$)","g"); //使用直接字面量创建 var regStr = /(^\s+)|(\s+$)/g; ``` 其中 g 表示全文匹配,与之相关的还有 i 和m,i 表示匹配时忽略大小写,m 表示多行匹配,如果多个条件同时使用时,则写成:`gmi ` 二、`()`、`[]`、`{}` 的区别 `()` 的作用是提取匹配的字符串。表达式中有几个`()`就会得到几个相应的匹配字符串。比如` (\s+)` 表示连续空格的字符串。 `[]`是定义匹配的字符范围。比如 `[a-zA-Z0-9]` 表示字符文本要匹配英文字符和数字。 `{}`一般用来表示匹配的长度,比如 `\d{3}` 表示匹配三个空格,`\d[1,3]`表示匹配1~3个空格。 三、`^` 和 `$` `^` 匹配一个字符串的开头,比如 `(^a)` 就是匹配以字母a开头的字符串 `$` 匹配一个字符串的结尾,比如 `(b$)` 就是匹配以字母b结尾的字符串 `^` 还有另个一个作用就是取反,比如`[^xyz]` 表示匹配的字符串不包含xyz 需要注意的是:如果`^`出现在`[]`中一般表示取反,而出现在其他地方则是匹配字符串的开头 四、`\d` `\s` `\w ` `.` `\d` 匹配一个非负整数, 等价于 `[0-9]` `\s` 匹配一个空白字符 `\w` 匹配一个英文字母或数字,等价于`[0-9a-zA-Z]` `. ` 匹配除换行符以外的任意字符,等价于`[^\n]` 五、`*` `+` `?` `*` 表示匹配前面元素0次或多次,比如 `(\s*)` 就是匹配0个或多个空格 `+` 表示匹配前面元素1次或多次,比如 `(\d+)` 就是匹配由至少1个整数组成的字符串 `?` 表示匹配前面元素0次或1次,相当于`{0,1}` ,比如`(\w?) `就是匹配最多由1个字母或数字组成的字符串 六、`test` 、`match` 前面的大都是JS正则表达式的语法,而`test`则是用来检测字符串是否匹配某一个正则表达式,如果匹配就会返回true,反之则返回false ```javascript /\d+/.test("123") ; //true /\d+/.test("abc") ; //false ``` `match` 是获取正则匹配到的结果,以数组的形式返回 ```javascript "186a619b28".match(/\d+/g); // ["186","619","28"] ``` 以上基本上是我经常用到的基础知识,不是很全面,不常用的就没有列出来,因为列出来也只是摆设,反而混淆主次! 七、`replace` `replace` 本身是JavaScript字符串对象的一个方法,它允许接收两个参数: `replace([RegExp|String],[String|Function])` 第1个参数可以是一个普通的字符串或是一个正则表达式 第2个参数可以是一个普通的字符串或是一个回调函数 如果第1个参数是RegExp, JS会先提取RegExp匹配出的结果,然后用第2个参数逐一替换匹配出的结果 如果第2个参数是回调函数,每匹配到一个结果就回调一次,每次回调都会传递以下参数: `result`: 本次匹配到的结果 `$1,...$9`: 正则表达式中有几个(),就会传递几个参数,`$1~$9`分别代表本次匹配中每个`()`提取的结果,最多9个 `offset`:记录本次匹配的开始位置 `source`:接受匹配的原始字符串 以下是 `replace` 和JS正则搭配使用的几个常见经典案例: (1)实现字符串的trim函数,去除字符串两边的空格 ```javascript String.prototype.trim = function(){ //方式一:将匹配到的每一个结果都用""替换 return this.replace(/(^\s+)|(\s+$)/g,function(){ return ""; }); //方式二:和方式一的原理相同 return this.replace(/(^\s+)|(\s+$)/g,''); }; ``` `^\s+` 表示以空格开头的连续空白字符,`\s+$` 表示以空格结尾的连续空白字符,加上`()` 就是将匹配到的结果提取出来,由于是 `|` 的关系,因此这个表达式最多会`match`到两个结果集,然后执行两次替换: ```javascript String.prototype.trim = function(){ /** * @param rs:匹配结果 * @param $1:第1个()提取结果 * @param $2:第2个()提取结果 * @param offset:匹配开始位置 * @param source:原始字符串 */ this.replace(/(^\s+)|(\s+$)/g,function(rs,$1,$2,offset,source){ //arguments中的每个元素对应一个参数 console.log(arguments); }); }; " abcd ".trim(); ``` ```javascript 输出结果: [" ", " ", undefined, 0, " abcd "] //第1次匹配结果 [" ", undefined, " ", 5, " abcd "] //第2次匹配结果 ``` (2)提取浏览器url中的参数名和参数值,生成一个key/value的对象 ```javascript function getUrlParamObj(){ var obj = {}; //获取url的参数部分 var params = window.location.search.substr(1); //[^&=]+ 表示不含&或=的连续字符,加上()就是提取对应字符串 params.replace(/([^&=]+)=([^&=]*)/gi,function(rs,$1,$2){ obj[$1] = $2; }); return obj; } ``` `/([^&=]+)=([^&=]*)/gi` 每次匹配到的都是一个完整key/value,形如 xxxx=xxx, 每当匹配到一个这样的结果时就执行回调,并传递匹配到的key和value,对应到$1和$2 (3)在字符串指定位置插入新字符串 ```javascript String.prototype.insetAt = function(str,offset){ //使用RegExp()构造函数创建正则表达式 var regx = new RegExp("(.{"+offset+"})"); return this.replace(regx,"$1"+str); }; "abcd".insetAt('xyz',2); //在b和c之间插入xyz >> "abxyzcd" 当offset=2时,正则表达式为:(^.{2}) .表示除\n之外的任意字符,后面加{2} 就是匹配以数字或字母组成的前两个连续字符,加()就会将匹配到的结果提取出来,然后通过replace将匹配到的结果替换为新的字符串,形如:结果=结果+str ``` (4) 将手机号12988886666转化成129 8888 6666 ```javascript function telFormat(tel){ tel = String(tel); //方式一 return tel.replace(/(\d{3})(\d{4})(\d{4})/,function (rs,$1,$2,$3){ return $1+" "+$2+" "+$3 }); //方式二 return tel.replace(/(\d{3})(\d{4})(\d{4})/,"$1 $2 $3"); } ``` `(\d{3}\d{4}\d{4}) `可以匹配完整的手机号,并分别提取前3位、4-7位和8-11位,"$1 $2 $3" 是在三个结果集中间加空格组成新的字符串,然后替换完整的手机号。 (5) 实现函数escapeHtml,将`<`, `>`, `&`, " 进行转义 ```javascript function escapeHtml(str) { //匹配< > " & return str.replace(/[<>"&]/g, function(rs) { switch (rs) { case "<": return "<"; case ">": return ">"; case "&": return "&"; case "\"": return """; } }); } ``` 我是Mr-老鬼、QQ1156346325 。交流QQ群:620028786,647082990 **------------------------------------------------版权声明------------------------------------------------------** 本文版权所有~Mr-老鬼 ~转载请注明原文地址 免责声明:本文所有的教程仅限交流学习使用不得用于违法用途,造成的法律后果本人不承担责任。
Mr、老鬼
2021年8月1日 16:34
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码