正则 - 阮一峰

学习地址

一 正则实例方法

1. test

  • 正则实例.test返回布尔值
var r = /x/g;
var s = '_x_x';r.lastIndex // 0
r.test(s) // truer.lastIndex // 2
r.test(s) // truer.lastIndex // 4
r.test(s) // false
  • 死循环,因为while循环的每次匹配条件都是一个新的正则表达式,导致lastIndex属性总是等于0。
var count = 0;
while (/a/g.test('babaa')) count++;
  • fixed
var count = 0;
var test1 = /a/g
while (test1.test('babaa')) count++;
console.log(count) // 3

2. exec

  • 正则实例.exec返回数组,匹配不到时返回null
  • g全局 + lastIndex : 会从上次结束的位置继续
var reg = /a/g;
var str = 'abc_abc_abc'var r1 = reg.exec(str);
r1 // ["a"]
r1.index // 0
reg.lastIndex // 1var r2 = reg.exec(str);
r2 // ["a"]
r2.index // 4
reg.lastIndex // 5var r3 = reg.exec(str);
r3 // ["a"]
r3.index // 8
reg.lastIndex // 9var r4 = reg.exec(str);
r4 // null
reg.lastIndex // 0
  • 组匹配:如果正则表示式包含圆括号(即含有“组匹配”),第一个成员是整个匹配成功的结果,后面的成员就是圆括号对应的匹配成功的组。
var s = '_x_x';
var r = /_(x)/;r.exec(s) // ["_x", "x"]
  • 第一个成员是第一个匹配上的,不会返回全部
var r = /a(b+)a/;
var arr = r.exec('_abbba_aba_');arr // ["abbba", "bbb"]
  • 返回所有匹配
var reg = /a/g;
// 不加g会死循环
var str = 'abc_abc_abc'while(true) {var match = reg.exec(str);if (!match) break;console.log('#' + match.index + ':' + match[0]);
}
// #0:a
// #4:a
// #8:a

二 字符串方法

1. match

  • 字符串.match():返回一个数组,如果正则表达式带有g修饰符,成员是所有匹配的子字符串(该方法与正则对象的exec方法行为不同)

  • 字符串的search/replace/split都可以和正则配合使用

  • 去除所有空格

var str = '  #id div.class  ';
str = str.replace(/\s+/g, '')
console.log(str) // #iddiv.class

2. replace

  • replace方法的第二个参数还可以是一个函数,将每一个匹配内容替换为函数返回值。
'3 and 5'.replace(/[0-9]+/g, function (match) {return 2 * match;
})
// "6 and 10"var a = 'The quick brown fox jumped over the lazy dog.';
var pattern = /quick|brown|lazy/ig;a.replace(pattern, function replacer(match) {return match.toUpperCase();
});
// The QUICK BROWN fox jumped over the LAZY dog.

replace模板替换

在这里插入图片描述

  • 正则所匹配的内容会被第二个参数的返回值替换掉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法 --- 有效的括号

解题思路: 1.对括号分别赋值(左括号大于0,右括号小于0),方便后期比较 2.使用栈,对于大于0的字符串入栈,对于小于0的字符串,检查栈中是否有元素,若没有返回false,否则拿出栈顶的一个元素,和现在的元素进行比较 /** * param {string} s * return {boolean} */ var isValid func…

ES6-14 Unicode表示法、字符串方法、模板字符串

Unicode表示法 本身能正常识别的,加{}也能识别,花括号内的内容表示码点 parseInt(0061,16) // 十进制的97,97在ASCII码中对应a console.log(\u0061) // a console.log(\u{0061}) // a console.log(\u{61}) // a原型上方法 codePointAt(十进…

算法 --- 删除数组中重复项

解题思路: 如果输入的数组长度为1,则返回该数组否则(len>2),使用i记录当前待插入的位置,j记录下一个与nums[i]不相等的位置,leng为待返回数组的长度当nums[i] ! nums[j]时,把j位置的值nums[j]放在i1位置.同时i,j /*** param {number[]} nums* return {number}*/ var remov…

如何理解 Linux 中的 load averages

原文:https://mp.weixin.qq.com/s?src11&timestamp1533697106&ver1047&signaturepoqrJFfcNABv4biKKpa4mZdIW7No2Wo1F5sbZL7ggoVS2GqcSqwQQ8hMulAmezT*zL*klB-eE5BeMyNuyjuIH7YgkBAN25i6*ahhEpWyxqx6vPct-Vr7q7AU0YGe-F*l&new1 http://blog.scoutap…

Jsp+Servlet+MYSQL注册登录案例(界面难看,ε=(´ο`*)))唉)

注册登录界面尤为常见,我的界面尤为难看,勉为其难的写吧,前端不熟就是这样。。。 这个案例运用到了: 1.Jsp动态页面--->动态页面 2.Servlet逻辑判断后台---->实现界面与数据库/业务的连接,简而言之,起承转合。PS…

ES6-15 map与set

Promise、Proxy、Map、Set这些ES6新增的api无法用babel实现语法降级,需要使用到polyfill Set 成员是唯一的,不能重复有iterator接口,可迭代具有iterator接口的所有类型,都能作为new Set()的参数,如类数组、数组 con…

ES6-16 WeakMap与WeakSet、proxy与reflect

WeakMap/WeakSet 原型上不存在遍历方法(没有部署iterator接口)成员只能是对象垃圾回收机制不考虑对成员对象的应用 WeakSet/WeakMap 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象…

ES6-17 class与对象

class 模拟类的方式语法糖(把以前的写法换了一个方式) 类内部的方法是不可枚举的 ES5用Object.assign拓展的原型属性是可枚举的 function Point(x, y) {this.x x;this.y y; } // 这样定义的原型上方法eat\drink是可枚举的 Point.prototype Object…

算法 --- 二叉树的最大深度

思路: 1.二叉树的深度,等于Max(左子树最大深度,右子树最大深度) 1 2.节点不存在时,此时的深度为0 3.当节点存在,左右子树不存在时(此时为叶子节点) 返回1 /*** Definition for a binary tree node.* function TreeNode(val) {* this.val val;* this.left this.righ…

ES6-18/19 异步的开端-promise

ES6-18异步的开端-promise ES6-19 promise的使用方法和自定义promisify try catch只能捕获同步异常,不能捕获异步的 等待所有异步都执行完,打印结果,比较笨拙的方法,在每个异步操作加arr.length 3 && show(arr) Promis…

算法 --- 平衡二叉树

解题思路: 1.首先写一个返回深度的函数d 2.写一个遍历函数t 3.在t中首先判断,r是否为空(为空则此时就是平衡二叉树,返回true),然后判断是否为叶子节点(r.left null && r.right null)若是则返回true,最后判断,其左子树的深度与右子树的深度之差是否大于1.若是则返回fal…

【co】ES6-20/21 iterator与generator

ES6-20 iterator与generator ES6-21 async与await、ES6的模块化 try catch不能捕获异步异常 try catch是同步代码 try {setTimeout(() > {console.log(a)}) } catch (e) {console.log(e) }iterator 内部迭代器:系统定义好的迭代器接口(如数组Symbol…

驱动芯片

一 LED驱动芯片: 1.1 TM1640:16位数码管驱动芯片,2线制控制(CLK/DIN),SCLK低电平时DIN输入,而SCLK高电平时保持DIN保持不变;开始传输:SCLKH时DIN由高变低,停止传输SCLKH时DIN由由低变…

confusion_matrix(混淆矩阵)

作者:十岁的小男孩 凡心所向,素履可往 目录 监督学习—混淆矩阵 是什么?有什么用?怎么用? 非监督学习—匹配矩阵 混淆矩阵 矩阵每一列代表预测值,每一行代表的是实际的类别。这个名字来源于它可以非常容…

Python 21 Django 实用小案例1

实用案例 验证码与验证 KindEditor 组合搜索的实现 单例模式 beautifulsoup4 验证码与验证 需要安装Pillow模块 pip stall pillow1、首先需要借助pillow模块用来画一个验证码图形,这里单独封装了一个py文件,调用一个方法就好了 1 #!/user/bin/env python…

数据恢复软件

链接:https://pan.baidu.com/s/1n6x5vhW-3SY8MAvvnqVtog 密码:thh0转载于:https://www.cnblogs.com/huanu/p/9452039.html

VMware

1.VMware软件安装: https://jingyan.baidu.com/article/9f7e7ec09da5906f281554d6.html 2,镜像文件下载地址:http://www.cnbeta.com/articles/tech/566773.htm 有图形界面。 或是在官网:https://wiki.centos.org/Download 2.cento…

【重要】ES6-23 JavaScript模块化

前端js模块化的演变发展 模块化解决的问题 传统模块化、插件化 CommonJS AMD/CMD ES6模块化 ES6以前 没有js引擎 一开始js写在html的script标签里js内容增多,抽取出index.js文件,外部引入js再增加,index.html对应index.js index2.html对应ind…

jquery --- 多选下拉框的移动(穿梭框)

效果如下: 几个注意地方: 1.多选下拉框需要添加 multiple 2.获取选中的元素KaTeX parse error: Expected EOF, got # at position 3: (#̲id option:selec…(#id option:not(:selected)) 下面是代码的各个部分实现, 方便引用,最后是总体代码,方便理解 添加选中到右边: // …

ES6-24 生成器与迭代器的应用

手写生成器 先done再false,不然index就提前了一步1 var arr [1,2] function generator(arr){var i 0;return{next(){var done i > arr.length ? true : false,value done ? undefined : arr[i];return {value : value,done : done} }} } var gen gener…