[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 \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)matchmatch()方法用检索字符串中符合正则表达式的字符,并返回一个有符合字符组成的数组:
(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
相关文章推荐
- javascript的正则表达式语法和常用方法说明
- javascript中replace正则表达式语法
- javascript正则表达式语法
- javascript 正则表达式语法
- 关于:javaScript正则表达式语法
- javascript正则表达式语法
- JavaScript 正则表达式上——基本语法
- JavaScript正则表达式语法及使用范例大全
- JavaScript 正则表达式上——基本语法
- javascript正则表达式定义(语法)总结
- javascript中replace的正则表达式语法
- JavaScript 正则表达式上——基本语法
- javascript中基于replace函数的正则表达式语法
- JavaScript 正则表达式上——基本语法
- 正则表达式语法规则及在Javascript和C#中的使用方法
- javascript中replace的正则表达式语法
- JavaScript语法入门系列(七) 类和对象(正则表达式RegExp)
- javascript中基于replace函数的正则表达式语法
- javascript正则表达式语法
- JavaScript 正则表达式上——基本语法