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 就是双引号,这样保证了前后的一致性。
(?<name>)(提案) 具名组 格式:“问号+尖括号+组名” 作用:为每一个组匹配指定一个名字 ,可以通过exec方法返回结果的groups属性上引用该组名 示例1let result = /(?<year>\d{4})-(?<month>\d{2})/.exec('2019-10'); // result=['2019-10','2019',10] result.groups={year:'2019', month:'10'} 注意:如果要在正则表达式内部引用某个“具名组匹配”,可以使用 \k<组名> 的写法,同时数组引用也依然有效 示例2let 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表格简要总结)的更多相关文章

  1. js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable

    js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable 一.总结 一句话总结:bootstrap能够做为最火的框架,绝对不仅仅只有我看到的位置,它应该还有很多位置可 ...

  2. 学习 正则表达式 js java c# python 通用

    正则表达式 js java c# python 学习网站 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Globa ...

  3. js 表格操作----添加删除

    js 表格操作----添加删除 书名:<input type="text" id="name"> 价格:<input type="t ...

  4. 正则表达式 js 怎么获取匹配的变量

    正则表达式 js 怎么获取匹配的变量 $0 ~ $9 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  5. JS正则表达式语法(含ES6)(表格简要总结)

    文章目录 JS正则表达式 1. JS中正则表达式定义 2. 直接量字符 3. 字符类 4. 重复字符 5. 选择,分组和引用 6. 指定匹配位置 7. 修饰符 8. String 方法 9. RegE ...

  6. slickgrid 一个优秀的JS表格插件

    从熟悉JS以来,慢慢的喜欢上了这个门语言. 不自觉的,看了好多js的知识,可能也是因为做项目的原因吧. 这里稍微说下一个JS的grid插件 --slickgrid 了解这个插件也不是很多,稍微了解了下 ...

  7. JS表格分页(封装版)

    HTML代码: <html> <head> <meta charset='utf-8'> <script type="text/javascript ...

  8. 三.jquery.datatables.js表格编辑与删除

    1.为了使用如图效果(即将按钮放入行内http://www.datatables.net/examples/ajax/null_data_source.html) 采用了另一个数据格式 2.后台php ...

  9. JS表格分页组件:fupage的设计思路和详细使用方法(未来考虑开源,争取在2015年)

    一.背景         之前在秒针工作的时候,某js高级project师写了非常多自己的组件.当中一套是分页组件.叫做st-grid. 只是在我看来,bug太多.我常常给他反馈bug,我也不清楚为啥 ...

随机推荐

  1. Jenkins的制品管理

    Jenkins的制品管理 制品是什么? 也叫产出物或工件.制品是软件开发过程中产生的多种有形副产品之一.广义的制品包括用例.UML图.设计文档等.而狭义的制品就可以简单地理解为二进制包.虽然有些代码是 ...

  2. Python-hashlib、OS、Random、sys、zipfile模块

    # print(sys.version) #python 版本 # print(sys.path) # print(sys.platform) #当前什么系统 # print(sys.argv) #当 ...

  3. 从字节码来分析,i++与++i区别

    ++/-- 是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算,而自增自减运算符是一个操作数 前缀自增(++a):先进行自增运算,再进行表达式运算: 后缀自增(a++):先进行表达式运算, ...

  4. 如何使用WordPress搭建网站

    1.空间的申请 阿里用户可以申请[阿里共享虚拟主机普惠版6元/年],虽然配置和空间不高,但也可以做个小站点的.当不满足当前配置的时候,随时可以进行升级,所以拿来练手还是比较合适的.   2.WordP ...

  5. Springboot学习笔记【持续更新】

    1.Springboot四大核心: 自动配置 与Spring应用程序和常见的应用功能,Springboot能自动提供相关配置 起步依赖 告诉Springboot需要什么功能,它就能引入需要的依赖库 A ...

  6. 初步进入linux世界

    [Linux 系统启动过程] Linux的启动其实和windows的启动过程很类似,不过windows我们是无法看到启动信息的,而linux启动时我们会看到许多启动信息,例如某个服务是否启动. Lin ...

  7. ES6语法:函数新特性(一)

    ES6 函数 引言: 函数在任何语言中偶读很重要,java里面的函数通常叫做方法,其实是一个东西,使用函数可以简化更多的代码,代码结构看着更加清晰.今天我们来学学ES6语法中,函数有什么变化. 虽然现 ...

  8. Python python lamda 表达式

    '''关键字lambda表示匿名函数,冒号前面的x表示函数参数. 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果. 用匿名函数有个好处,因为函数没有名字,不必担心 ...

  9. dome 模块 pyaudio 声音处理 为语音识别准备

    dome 模块 pyaudio 声音处理 为语音识别准备 直接上例子 dome1 声音强度检查 import pyaudio import numpy as np class QAudio: CHUN ...

  10. nginx代理图片访问

    nginx代理图片访问 首先配置nginx的代理物理路径 我的是在E盘下面的image 1 #图片的代理 2 server { 3 listen 80; 4 #配置访问的域名 5 server_nam ...