您的位置:首页 > Web前端 > JavaScript

[Web]javascript正则表达式语法

2017-05-23 17:32 453 查看

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 \ftab 回车 换行 垂直制表符 换页符

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|yx或者yab
x{n}x{n,} x{n,m}重复n次,重复>=n次,重复次数x满足:n<=x<=mx{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。

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: