首页 > 编程知识 正文

js正则表达式教程,js如何使用正则表达式

时间:2023-05-05 10:30:07 阅读:205221 作者:2572

首先,我们先讨论一下什么是正则?为什么需要正则?正则能做哪些事情?

正则表达式实际上就是规定了一系列的字符串规则,例如说我们看到18788724827就能知道这是一个手机号,看到zifieyu@xx.com就知道这是一个邮箱。那么,我们怎么让计算机知道这一切呢?

我们人类之所以能分辨出来是因为我们心里有一个模型,我们知道十一位的数字很有可能就是一个手机号,@+邮箱品牌+.com的组合很有可能是一个邮箱。正则正式提供一种语法,让我们把自己心中的那种识别模式告诉计算机,让计算机能像我们人类一样去识别特定的字符串。好了话不多说,下面正式介绍一下正则的使用。

创建

正则也是一个js内置对象,所以可以通过new RegExp()的形式创建,也可以通过简写//的形式创建:

var re01 = new RegExp('a'); //这种形式创建,可以往正则中传入变量var re02 = /a/; // 简写形式不可以传入变量,且不能加引号

方法test

re.test(str)方法是正则对象上的一个方法,接受一个字符串作为参数,如果字符串中有符合正则的部分,则返回true,反之则返回false。

var str = 'abcd';var re = /a/;re.test(str) // true

方法search

str.search(re),查找字符串中是否有符合正则的部分,如果有,返回第一个匹配项的位置,否则返回-1;

var str = 'bbcasa';var re = /a/;str.search(re) // 4

方法match

str.match(re),寻找字符串中符合正则的匹配项,并将这些匹配项以数组的形式返回,否则返回null。

var str = 'abcaadaefaa';var re = /a+/g; // "+" 是一个量词表示出现一次或更多,"g"表示全局搜索,正则默认匹配到一个匹配项后就不会继续查找了。str.match(re) // ["a", "aa", "a", "aa"]

方法replace

str.replace(re, newStr | callback) 该方法首先匹配字符串中符合正则的部分然后替换成newStr或者callback的返回值;这里的callback = function(str,str1,str2…){return res},参数str表示匹配到的匹配项,str1,str2…分别表示正则匹配项中的第一个,第二个子项。关于什么是子项,后面我们会详细介绍。

var str = "我爱吃饭,我爱睡觉,我爱打jjddy";var re = /(吃饭)|(睡觉)|(打jjddy)/g ;str.replace(re, (...grv) => { var res = []; res = grv[0].split("").map(() => {return "*"}).join("") return res})

上面的例子中,我们过滤了某些词语,并且将其替换成**号,相信,大家在玩游戏的时候深有体会,打了半天字,发出去的没有几个!

默认行为

正则表达式中默认是区分大小写的,不过可以通过在末尾加上i来关闭这一默认行为

var re=/AbvR/i;

找到第一个匹配项就会结束查找,通过在末尾加g可以使得正则变成全局匹配模式

var re=/as/b;

正则中的小括号

分组操作:小括号内的部分作为一个整体进行操作,请看下面的例子

var str = '2017-8-12'var re01 = /d-+/g var re02 = /(d-)+/gstr.match(re01) // ['7-', '8-']str.match(re02) // ['7-8-']

匹配子项:整个正则匹配到的匹配项我们暂且成为父项,然后就容易理解,被小括号括起来的各个部分就是父项下面的一个一个的子项。

var str = '2017-8-12'var re = /(d+)(-)/gstr.replace(re, ($0, $1, $2) => { console.log($0, $1, $2) return $1 + "."}) // 2017- 2017 -; 8- 8 -; 2017.8.12

match()方法在不加g的情况下,在返回的数组中会展开所有子项;

var str = 'abc'var re = /(a)(b)(c)/str.match(re) // ['abc', 'a', 'b', 'c']

正则中的中括号

字符类:一组相似的字符,[abc]整体代表一个字符,内部为或的关系。

[^abc]:代表一位,单不能是a,b,c[a-z]: 代表一个范围(从小到大),整体代表一位;[a-z]+: 一位或多位

正则中的大括号

大括号用来表示量词

{4, 7}: 4-7次{4,}:最少4次{4}:正好4次{1,} 相当于+?相当于{0,1}*相当于{0,}

限制字符串的起始和结束

^: 写在正则的开头代表字符串的起始$:写在正则的结束代表字符串的结re=/^s*|s*$/g //去掉收尾空格

正则中的转义字符

点“.”
正则中“.”表示任意字符
. 表示真正的点
多用于文件后缀名d; D
数字,非数字w;W
字符,非字符s; S
空格,非空格b;B
独立部分,非独立部分独立部分是什么:
起始
结束
空格1; 2; 3 …
重复第n个子项
目的:看下面两个例子有什么不同 var re = /ww/; ab,cd var re =/(w)1/; aa, bb

实际开发环境

实际公司开发环境中,应该把正则都放到一个对象或者一个json中,方便统一管理,统一调配

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。