当前位置:首页 > 前端 > es6/js/jQuery技巧

javascript 正则表达式 - 学习笔记 - 持续更新

什么是正则表达式?

感觉正则是一个很神秘的东西,你给她传一串规则字符进去,她就能给你想要的字符串,就好像芝麻开门一样,给的暗号对上了门才会给我们打开,也就是说有迹可循并没有想象的那么神秘。这也激发我的正则极大兴趣,刚好最近也有点时间学习,所以这套学习笔记就诞生了。
个人理解正则表达式主要用来提取和操作各种变态的字符串,满足我们正常js代码无法操作的需求。只要学好了,夸张点说在字符串上面可以做到求必应。

正则表达式的编写格式:

市面上几乎所有的编码语言都支持正则,因为太需要了,那么js的编写格式是怎么样的呢?
据我了解,常用的有两种
第一种 也是最简单直观的一种, // 两个斜杆完事,如:匹配大写字母和小写字母,/[A-z]+/g
第二种 教程里边的叫法是,正则函数表达式,new Regexp(),那么上头的的写法应该是:new Regexp(‘[A-z]+’, ‘g’),注意参数都有单引号,是字符串的形式,这和第一种还是有点区别的。

JS如何测试和使用正则表达式?

函数 描述
test() 用于测试表达式是否正确,返回booleen值,也可用来做验证用,比如:表单的手机是否正确,/1\d{10}/.test(‘13455556666’),结果会返回true
replace() 英文的意思是替换,js是基于英文,那么意思相同了,如:’abcdffff’.replace(/ffff/, ‘zzzz’)
replaceAll() js中并没有这个方法,因为上面的的replace()配合正则已经能够实现任意操作方式,只要我们熟悉正则。举个简单的梨子,如:’abcdffff,jjjjfffffggjgjgj’.replace(/ffff/g, ‘zzzz’),经过测试返回结果成功,也就是说如果要批量替换,来个g就全局匹配指定的字符串了,很棒。
match() match也是很重要的,可以匹配到字符串里面的任意字符,类似查找的意思,如:’456756734567456’.match(/5/g),经过测试,返回了所有5并存入了数组。

第一天了解的知识面:

  1. 元字符
  2. 量词
  3. 范围匹配(字符组)

什么是元字符?

一般配合尾部g 使用,可以匹配多个重复的结果,不匹配g到尾部,则只会匹配一次查找。
以下是工作中比较常用的元字符,使用频率较高:

元字符 描述
. 匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 \n 在内的任何字符,请使用像(.|\n)的模式。
\w 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。
\d 匹配数字
\s 匹配空白符
\W 匹配字母、数字、下划线之外的字符
\D 匹配数字之外的字符
\S 匹配空白符之外的字符
\b 匹配单词边界
\B 匹配非单词边界
\n 匹配换行符
\r 匹配回车符
\t 匹配制表符

什么是量词?

我所理解的量词意思应该是,需要匹配的元字符的数量,如 \d+ 则表示不仅仅匹配一个数字,则是匹配更多的相邻数字,如果不带“+”,则只会匹配第一个出现的数字的信息
以下是工作中比较常用的量词,使用频率较高:

量词 描述
+ 匹配更多
匹配0到1次
* 匹配数字
{n} 匹配n次,即固定匹配的数量,如:简单的手机号正则匹配/1\d{10}/
{n,} 最少匹配n次,最多不限
{n,m} 最少匹配n次,最多匹配m次

什么是范围匹配符?

范围匹配符就是用于匹配再指定范围内的一个特定字符
以下是工作中比较常用的匹配符,使用频率较高:

范围匹配符 描述
[asdf] 匹配 asdf 这四个字符中的任意一个字符
[0-9] 匹配0到9之间的任意一个数字
[a-z] 匹配从小写字母a到小写字母z之间的任意字母
[A-Z] 匹配大写字母A到大写字母Z之间的任意字母
[A-z] 匹配大写字母A到小写字母Z之间的任意字母
[\u4e00-\u9fa5] 这是匹配中文的,听说最开始是不支持中文的,不过现在支持了

第二天了解的知识面

什么是分组?

()就可以表示分组,如:

  1. var str = 'abcabcabc';
  2. str.match(/abcabcabc/); // 结果:abcabcabc
  3. // 如果用分组
  4. str.match(/(abc){3}/); // 结果:abcabcabc

效果一样的,但表达式更简洁。

什么是限制匹配位置?

名称 术语 介绍
乘方符号 ^ 从字符串开始的位置开始匹配
美元符号 $ 从字符串结束的位置开始匹配

注意:如果乘方符号和美元符号同时出现在一个表达式里面,如:/^1\d{10}$/这就相当于绝对匹配了。

  1. /^1\d{10}$/.test('13512345678') // 结果:true
  2. /^1\d{10}$/.test('13512345678111') // 结果:false

什么是修饰符?

修饰符 描述
i 匹配的时候忽略大小写,如:/abcdefg/i
m 就行多行匹配,比如texteare里面的值,可能存在换行,而我们需要获取每行开头或结束位置的字符串,如:/^[abcd]/m表示获取每行开始的abcd、/[abcd]$/表示获取每行结束位置的abcd.注意:m修饰符需要配合限制符号乘方^和美元符号$才能看出效果。
g 全局多次匹配,只要字符串里面有达标正则的字符串

什么是范围排除?

用于排除指定范围的字符串,即不匹配这个字符
乘方符号^ 这玩意出现在不同的位置,表示的意思也是大有不同,如:/[^abcd]/、/a^bcd/

读后有收获可以支付宝请作者喝咖啡
下一篇 >
文章评论
湘ICP备15005320号-1 似懂非懂 Powered by doyo. 网站地图
返回顶部