JS正则表达式语法(含ES6)(表格简要总结)
文章目录
JS正则表达式
1. JS中正则表达式定义
JavaScript
中的正则表达式用 RegExp
对象表示。
JS中定义正则表达式的两种方法:
方法 | 示例 |
---|---|
RegExp 对象 |
var pattern = new RegExp("s"); |
直接量 | var pattern = /s/; |
2. 直接量字符
正则表达式中的所以字母和数字都是按照字面含义进行匹配的,同样也支持非字母数字的字符匹配,这些字符需要通过反斜线 '\'
作为前缀进行转义。
正则表达式中的直接量字符:
直接量字符 | 匹配 |
---|---|
字母和数字字符 | 自身 |
\o | NUL字符(\u0000) |
\t | 制表符(\u0009) |
\n | 换行符(\u000A) |
\v | 垂直制表符(\u000B) |
\f | 换页符(\u000C) |
\r | 回车符(\u000D) |
\xnn | 由16进制数nn指定的拉丁字符,例如,\x0A等价于\n |
\uxxxx | 由16进制数xxxx指定的Unicode字符,例如\u0009等价于\t |
3. 字符类
将直接量字符单独放在方括号内就组成了字符类。
正则表达式中的字符类:
字符类 | 匹配 |
---|---|
[…] | 方括号内的任意字符 |
[^…] | 不在方括号内的任意字符 |
. |
除换行符和其它Unicode行终止符之外的任意字符 |
\w | 任何ASCII字符组成的单词,等价于 [a_zA-Z0-9] |
\W | 任何不是ASCII字符组成的单词,等价于 [^a-zA-Z0-9] |
\s | 任何Unicode空白符 |
\S | 任何非Unicode空白符 |
\d | 任何ASCII数字,等价于 [0-9] |
\D | 除了ASCII数字之外的任何字符,等价于 [^0-9] |
4. 重复字符
正则表达式中的重复字符:
重复字符 | 含义 |
---|---|
{n,m} | 匹配前一项至少n次,但不超过m次 |
{n,} | 匹配前一项n次或更多次 |
{n} | 匹配前一项n次 |
? | 匹配前一项0次或1次,等价于 {0,1} |
+ | 匹配前一项1次或多次,等价于 {1,} |
* | 匹配前一项0次或多次,等价于 {0,} |
默认为贪婪匹配,若要实现非贪婪匹配,只需在待匹配的项后面加1个 ?
即可。
详细说明见贪婪匹配和非贪婪匹配。
5. 选择,分组和引用
正则表达式中的选择、分组和引用字符:
字符 | 含义 |
---|---|
| | 选择,匹配的是该符号左边或右边的子表达式 |
(…) | 组合,将几个项组合成一个单元,可以记住和这个组合相匹配的字符串。var result = 'JavaScript'.match(/(Java)Script/) result[0] = 'JavaScript' result[1] = 'Java' result[1] 中的内容就是(Java) 组合中匹配到的字符串 |
(?:…) | 把几个项组合成一个单元,但是不记住和这个组合相匹配的字符串 |
(\n) | 和第n个分组第一次匹配的字符相匹配,组是圆括号中的子表达式(也可能是嵌套的),组索引是从左到右的做括号数。 /(['"])[^'"]*\1/ 这样当 (['"]) 中匹配的是单引号时,\1 就是单引号,当 (['"]) 中匹配的是双引号时,\1 就是双引号,这样保证了前后的一致性。 |
(?)(提案) | 具名组 格式 :“问号+尖括号+组名” 作用 :为每一个组匹配指定一个名字 ,可以通过exec方法返回结果的groups属性上引用该组名 示例1 : let result = /(?<year>\d{4})-(?<month>\d{2})/.exec('2019-10'); // result=[‘2019-10’,‘2019’,10] result.groups={year:‘2019’, month:‘10’} 注意 :如果要在正则表达式内部引用某个“具名组匹配”,可以使用 \k<组名> 的写法,同时数组引用也依然有效 示例2 :let result = /^(?<word>[a-z]+)!\k(word)!\1$/.test('abc!abc!abc') // true let result = /^(?<word>[a-z]+)!\k(word)!\1$/.test('abc!abc!ab') // false |
6. 指定匹配位置
正则表达式中的锚字符:
字符 | 含义 |
---|---|
^ | 匹配字符串的开头,在多行匹配(有修饰符m)中匹配每一行的开头 |
$ | 匹配字符串的结尾,在多行匹配(有修饰符m)中匹配每一行的结尾 |
\b | 匹配一个单词的边界,简言之,就是位于字符 \w 和 \W 之间的位置,或位于字符 \w 和字符串的开头或者结尾之间的位置(但需要注意, [\b] 匹配的是退格符) |
\B | 匹配非单词边界的位置 |
(?=p) | 零度正向先行断言,要求接下来的字符要与p匹配,并且匹配的结果不包含p,如 var result = 'JavaScript:a'.match(\JavaScript(?=:)\) 匹配结果: result[0]='JavaScript' JavaScript 后面要紧跟着是 ':' 才能匹配成功,并且结果中不包含 ':' |
(?!p) | 零度负向先行断言,要求接下来的字符不与p匹配 |
(?<=p)(提案) | 后行断言,要求前面的字符要与p匹配,并且匹配的结果中不包含p,如 var result = /(?<=\$)\d+/.exec('$100*80'); // result=['100'] |
(?<!p) | 后行否定断言,要求前面的字符不能与p匹配,并且匹配结果中不包含p,如 var result= /(?!\$)\d+/.exec('$100*80'); // result=['80'] |
7. 修饰符
正则表达式中的修饰符:
字符 | 含义 |
---|---|
i | 忽略大小写 |
g | 全局匹配,也就是找到所有的匹配,而不是找到第一个匹配之后就停止 |
m | 多行匹配,^匹配每一行的开头,$匹配每一行的结尾 |
u(ES6) | 能够处理码点大于 \uFFFF 的Unicode字符,即能够处理4个字节的UTF-16编码 |
y(ES6) | “粘连”修饰符,匹配必须从未匹配字符串的第一个位置开始,即暗含头部匹配。下一次的匹配是在lastIndex的位置开始匹配。详细说明见[ES6y修饰符]( <https://blog.csdn.net/qq_43199318/article/details/102489816 )。 |
s(提案) | 使 '.' 修饰符可以匹配任意一个字符 |
8. String 方法
String支持的4中使用正则表达式的方法:
String方法 | 用法 |
---|---|
search() | 参数 :一个正则表达式 ,若不是,会先通过RegExp构造函数将其转换成正则表达式 返回值 :第一个与之匹配的子串的起始位置,若匹配失败返回-1 注意 :不支持全局搜索,忽略g修饰符 示例 :'JavaScript'.search(/Script/); // 4 |
replace() | 参数 :第一个是正则表达式,第二个是要进行替换的字符串 返回值 :替换后的字符串 注意 :如果第一个参数不是正则表达式,不会进行转换 示例 :'javascript'.replace(/\w+/,'JavaScript'); // JavaScript |
match() | 参数 :一个正则表达式,若不是,会先通过RegExp构造函数将其转换成正则表达式 返回值 :非全局匹配时:一个数组,第一个元素是与正则表达式相匹配的字符串,余下的元素是与圆括号(分组)内的子表达式匹配的字符串 全局匹配时:一个数组,元素由正则表达式相匹配的字符串组成,也就是只有非全局匹配时返回数组的第一个元素 注意 :非全局匹配时,返回的数组带有两个属性,input:要匹配的字符串 index:匹配成功的子串的起始位置 示例 :var result = '1+2=3'.match(/\d+/); //result[0]='1' result.index=0 result.input='1+2=3' var result = '123'.match(/(1)/d+/); // result[0]='123' result[1]='1'result.index=0 result.input='123' 全局匹配时 :var result = '123'.match(/(1)/d+/g); // result[0]='123' 没有index,input等属性,也没有result[1] |
split() | 参数 :可以是一个字符串也可以是一个正则表达式 返回值 :将一个字符串拆分为一个子串组成的数组 示例 :'1, 2, 3'.split(','); // ['1', '2', '3'] '1, 2, 3'.split(/\s*,\s*/); //['1','2','3'] |
9. RegExp对象
RegExp的属性:
属性 | 含义 |
---|---|
source | 只读字符串,包含正则表达式文本 |
global | 只读布尔值,说明是否带有全局匹配修饰符g |
ignoreCase | 只读布尔值,说明是否带有忽略大小写修饰符i |
multiline | 只读布尔值,说明是否带有多行匹配修饰符m |
lastIndex | 可读写的整数,存储下一下匹配时的起始位置 |
sticky(ES6) | 只读布尔值,表示是否设置了y修饰符 |
flags(ES6) | 返回正则表达式的修饰符 /abc/ig.flags // 'gi' |
RegExp的方法:
方法 | 用法 |
---|---|
exec() | 参数 :一个字符串 返回值 :无论是否是全局匹配,都返回一个数组,并且第一个元素是与正则表达式相匹配的字符串,余下的元素是与圆括号内的子表达式相匹配的字串 注意 :无论是否是全局匹配返回的数组都带有index和input属性 示例 :var result = /(1)\d+/.exec('123'); // result[0]='123 result[1]='1' result.index=0 result.input='123' var result = /(1)\d+/g.exec('123); //result[0]='123' result[1]='1' result.index=0 result.input-'123' 全局匹配 |
test() | 参数 : 一个字符串 返回值 :如果包含正则表达式的一个匹配结果,返回true,否则返回null 示例 :/\d+/.test('123'); // true /\d+/.test('abc'); // null |
JS正则表达式语法(含ES6)(表格简要总结)的更多相关文章
- js正则表达式语法
1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的 ...
- [转载]js正则表达式语法
1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的 ...
- js正则表达式语法[转]
1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的 ...
- 汽车车牌JS正则表达式验证(含新能源车牌)
/** * 第一:普通汽车 * 车牌号格式:汉字 + A-Z + 5位A-Z或0-9( 车牌号不存在字母I和O防止和1.0混淆) * (只包括了普通车牌号,教练车,警等车牌号 .部分部队车,新能源不包 ...
- JS的prototype和__proto__(含es6的class)
JS的prototype和__proto__(含es6的class) 一.prototype和__proto__的概念 prototype是函数的一个属性(每个函数都有一个prototype属性),这 ...
- JS实现点击表头表格自动排序(含数字、字符串、日期)
这篇文章主要介绍了利用JS如何实现点击表头后表格自动排序,其中包含数字排序.字符串排序以及日期格式的排序,文中给出了完整的示例代码,并做了注释,相信大家都能看懂,感兴趣的朋友们一起来看看吧. < ...
- JS正则表达式完整教程
JS正则表达式完整教程(略长) 引言 亲爱的读者朋友,如果你点开了这篇文章,说明你对正则很感兴趣. 想必你也了解正则的重要性,在我看来正则表达式是衡量程序员水平的一个侧面标准. 关于正则表达式的教程, ...
- JS正则表达式常用总结
正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...
- [转]精通JS正则表达式
原文路径:http://www.jb51.net/article/25313.htm 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式 ...
随机推荐
- nmap中的详细命令
nmap全部参数详解-A 综合性扫描端口:80http 443https 53dns 25smtp 22ssh 23telnet20.21ftp 110pop3 119nntp 143imap 179 ...
- (五)OpenStack---M版---双节点搭建---Nova安装和配置
↓↓↓↓↓↓↓↓视频已上线B站↓↓↓↓↓↓↓↓ >>>>>>传送门 1.创建nova 和 nova_api数据库 2.获得 admin 凭证来获取只有管理员能执行的 ...
- 高德JS依赖分析工程及关键原理
一.背景 高德 App 进行 Bundle 化后,由于业务的复杂性,Bundle 的数量非常多.而这带来了一个新的问题——Bundle 之间的依赖关系错综复杂,需要进行管控,使 Bundle 之间的依 ...
- 图解 Spring:HTTP 请求的处理流程与机制【4】
4. HTTP 请求在 Spring 框架中的处理流程 在穿越了 Web 容器和 Web 应用之后,HTTP 请求将被投送到 Spring 框架,我们继续剖析后续流程.Web 应用与 Spring M ...
- Python3学习-基础
1.直接运行.py文件 在Windows上是不行的,但是在Mac和Linux上是可以的,方法是在.py文件的第一行加上一个特殊的注释: #!/usr/bin/env python3 print('he ...
- 【浅析】|白话布隆过滤器BloomFilter
通过本文将了解到以下内容: 查找问题的一般思路 布隆过滤器的基本原理 布隆过滤器的典型应用 布隆过滤器的工程实现 场景说明: 本文阐述的场景均为普通单机服务器.并非分布式大数据平台,因为在大数据平台下 ...
- cesium定义线面
面: var polygon = viewer.entities.add({ polygon : { hierarchy : { positions : null, holes : [{ positi ...
- 新手学分布式 - Envoy Proxy XDS Server动态配置的一点使用心得
Envoy Proxy 动态API的使用总结 Envoy Proxy和其它L4/L7反向搭理工具最大的区别就是原生支持动态配置. 首先来看一下Envoy的大致架构 从上图可以简单理解:Listener ...
- JavaScript的定时器是如何工作的
理解JavaScript定时器工作原理对于学习JavaScript非常重要.因为JavaScript是单线程运行的,定时器使用场合少,不是很直观.下面通过三个函数来学习JavaScript如何定义,操 ...
- List接口下的集合
集合框架 List接口下的集合特点: Set接口下的集合特点: 1.都是有序的 1.都是无序的 2.都有下标 2.没有下标 3.都可以重复 3.不可重复(覆盖) List接口下的集合 1.ArrayL ...