[Web]javascript正则表达式语法

来源:互联网 发布:xampp配置mysql 编辑:程序博客网 时间:2024/06/16 05:57

1.基础语法

字符 含义 举例 . 任意字符(除换行符以外:\n,\r,\u2028) /…/.test(‘9q#’) \d 数字0-9 /\d\d\d/.test(‘123’); \D 非0-9的字符 /\D\D\D/.test(‘ab’!); \w 数字0-9,或者字母a-z及A-Z,或者下划线 /\w\w\w\w/.test(“9dW_”); \W 非w /\W\W\W/.test(“!@#”) \s 空格符,tab,换页符,换行符 /\sabc/.test(” abc”) \S 非\s \t \r \n \v \f tab 回车 换行 垂直制表符 换页符

2.范围符号

字符 含义 举例 […] 字符范围 [a-z][0-9] [a-z0-9] [^…] 字符范围以外 [^a-z] ^ 匹配行首 ^hi 匹配行尾 test$ \b 零宽单词边界 \bno \B 非零宽单词匹配

3.分组

字符 含义 举例 (x) 分组,并记录匹配到的字符串 /(abc)/ \n 使用分组符(x)匹配到的字符串 /(abc)\1/.test(‘abcabc’); (?:x) 仅分组 /(?:abc)(def)\1/.test(‘abcdefdef’);

4.重复

字符 含义 举例 x* x+ 重复次数>=0 重复次数>0 贪婪算法 abc*将匹配ab,abc,abcccc ;abc+将匹配abc,abcccc,不匹配ab x*? x+? 同x*,x+ 非贪婪算法 abc*?将匹配ab,abc+?则匹配abc x? 出现0次或1次 x|y x或者y ab x{n}x{n,} x{n,m} 重复n次,重复>=n次,重复次数x满足:n<=x<=m x{5}匹配xxxxxoo,不匹配xxo

5.正则表达式内置方法

(1)test:判断一个字符串是否匹配该正则表达式的,参数为需要进行匹配的字符串,返回一个布尔值。
这里写图片描述
(2)exec:查找字符串中是否有匹配该正则表达式的字符,并且返回一个匹配字符所组成的一个数组。
这里写图片描述
(3) compile:改变正则的属性。
这里写图片描述


6.字符串于正则相配合

(1)match

match()方法用检索字符串中符合正则表达式的字符,并返回一个有符合字符组成的数组:

这里写图片描述

(2)search

search()方法用于查询字符串中符合正则的字符的索引,并返回这个索引,没有找到返回-1,这个方法只能返回第一个匹配到的字符的索引位置:

这里写图片描述

(3)split

split()方法用于将字符串转换为数组,参数是字符串转换数组后间隔的参照物,但是有一些复杂的转换就比较麻烦了,这时候我们可以使用正则表达式对字符串进行筛选后再组成数组.

这里写图片描述

(4)replace
replace()方法可以传入两个参数,第一个是字符串中需要被替换的字符,第二个是用以替换的字符,但是如果只是传入两个字符,那么它只能替换一次,如果和正则表达式结合起来使用,就能利用正则的全局匹配进行多次替换,甚至更加复杂的操作

这里写图片描述

7.es6中正则的扩展

(1)字符串的正则扩展

字符串对象共有4个方法,可以使用正则表达式。ES6将这4个方法,在语言内部全部调用RegExp的实例方法,从而做到所有与正则相关的方法,全都定义在RegExp对象上。

string.prototype.match调用reqexp.prototype[symbol.match]

(2)u修饰符

ES6对正则表达式添加了u修饰符,含义为“Unicode模式”,用来正确处理大于\uFFFF的Unicode字符。也就是说,会正确处理四个字节的UTF-16编码。

这里写图片描述

上面代码中,\uD83D\uDC2A是一个四个字节的UTF-16编码,代表一个字符。但是,ES5不支持四个字节的UTF-16编码,会将其识别为两个字符,导致第二行代码结果为true。加了u修饰符以后,ES6就会识别其为一个字符,所以第一行代码结果为false。

(3)y修饰符

y修饰符的作用与g修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义。

ar s = 'aaa_aa_a';var r1 = /a+/g;var r2 = /a+/y;r1.exec(s) // ["aaa"]r2.exec(s) // ["aaa"]r1.exec(s) // ["aa"]r2.exec(s) // null

上面代码有两个正则表达式,一个使用g修饰符,另一个使用y修饰符。这两个正则表达式各执行了两次,第一次执行的时候,两者行为相同,剩余字符串都是_aa_a。由于g修饰没有位置要求,所以第二次执行会返回结果,而y修饰符要求匹配必须从头部开始,所以返回null。

原创粉丝点击