正则表达式 RegExp
正则表达式 RegExp
- 一、正则表达式的概念
- 二、正则表达式的组成
- 三、正则对象 RegExp
- 两种方式的区别
- 四、正则对象的方法
- 五、修饰符
- 六、元字符
- 七、字符类
- 八、量词
- 九、转义字符 \
- 十、分组
- 反向引用
- 十一、或
- 十二、断言
- 十三、匹配模式
- 十四、字符串中和正则相关的方法
一、正则表达式的概念
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
二、正则表达式的组成
正则表达式由元字符,字符类,和量词组成 /^([字符类]{量词})([字符类]{量词})$/
三、正则对象 RegExp
- 通过new 关键字声明正则对象
// 正则规则: 可以是字符串类型,也可以是正则var patt = new RegExp(正则规则, 修饰符)var patt = new RegExp('a', 'g')var patt = new RegExp(/a/, 'g')
- 字面量的形式
var patt = /正则规则/修饰符
两种方式的区别
字面量形式不能接受变量
四、正则对象的方法
test() : 执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。
exec() : 在一个指定字符串中执行一个搜索匹配。返回一个结果数组(包含所有匹配的结果)或 null(没有匹配则为null)。如果要检索出所有匹配的结果,则需要使用循环
该方法在执行时,通过lastIndex属性会纪录每次匹配结束的位置,下次执行则从lastIndex纪录的位置开始; 找不到匹配的结果时,lastIndex属性会重置为0, 从头开始
var patt = /o/g;var str = 'hello world oo';var res1 = patt.exec(str) var res2 = patt.exec(str) var res3 = patt.exec(str) // 借助循环获取所有的结果let res;while(res = patt.exec(str)){console.log(res)}
五、修饰符
- g : 全局匹配
- i : 不区分大小写
- m : 多行匹配
六、元字符
- ^ : 匹配以什么作为开始
- $ : 匹配一什么作为结束
- () : 分组或者反向引用
- | : 或
七、字符类
- [xyz] : 字符类的集合, 匹配方括号中的任意字符
- [^xyz] : 一个反向字符集。也就是说, 它匹配任何没有包含在方括号中的字符
在字符类中可以使用-
表示范围的集合 - [0-9] : 匹配数字0 到 9
- [a-z] : 匹配小写字母
- [A-Z] : 匹配大写字母
- [A-Za-z] : 匹配大小写字母
- [A-Za-z0-9] : 匹配大小写字母以及数字
.
: 默认匹配除换行符之外的任何单个字符。
针对常用的匹配规则,可以使用简写等价形式
\w : 等价形式 [A-Za-z0-9_]
\W : 匹配一个非单字字符。等价于 [^A-Za-z0-9_]
\d : 等价于 [0-9]
\D :匹配一个非数字字符 等价于 [^0-9]
\s : 匹配任意的空白符
\S :除了空白符以外的
八、量词
量词限定字符类出现的次数; 量词分为贪婪的和惰性的
*
: 匹配0次或者多次 , 等价形式 {0,}+
: 匹配1次或者多次 , 等价形式 {1,}?
: 匹配0次或者1次 , 等价形式 {0,1}- {n} : 匹配n次
- {n,} : 至少匹配n次,最多不限
- {n,m} : 最少匹配n次, 最多m次
九、转义字符 \
如果在正则表达式中匹配 需要匹配特殊的字符(正则规则中使用的字符), 需要借助于 转义字符 \特殊字符
; 有时候为了避免出现不可控问题,需要使用双重转义\\字符
十、分组
() 分组和反向引用;
只分组不引用: ?:()
反向引用
反向引用 引用的是匹配的结果,而不是匹配的规则
反向引用 \n
数字n 是左括号的顺序
// 反向引用
var patt = /^<(h1)>\w{1,}<\/\1>/
var str = '<h1>hello</h1>';
var res = patt.test(str)// 只分组, 不引用
var patt = /^((?:(ECMA)Script)Hello)$/
var str = 'ECMAScriptHello';
var res = patt.test(str);
// 反向引用 $n : n 是左括号的顺序; 如果是正则对象的属性,使用 $n; 如果在正则表达式中使用,则使用 \nconsole.log(RegExp.$1);
console.log(RegExp.$2);
console.log(RegExp.$3);
console.log(RegExp.$4);
十一、或
var patt = /hello(red)|(black)/
var patt = /hello[a|b]/
十二、断言
- x(?=y) :匹配’x’仅仅当’x’后面跟着’y’.这种叫做先行断言(正向前瞻)。
- x(?!y) : 仅仅当’x’后面不跟着’y’时匹配’x’,这被称为正向否定查找(负向前瞻)。
十三、匹配模式
正则规则的匹配模式有两种: 贪婪模式和惰性模式
- 贪婪模式: 尽可能多的去匹配
var str = '123456789012345678900';var res = str.match(/\d{3,6}/g);
- 惰性模式: 尽可能少的去匹配
可以在贪婪模式的后边添加 ? 变成惰性模式+? *? {n,}? {n,m}? ??
var str = '123456789012345678900';
var res = str.match(/\d{3,6}?/g);
十四、字符串中和正则相关的方法
- replace():替换与正则表达式匹配的字符串; 默认替换的是第一次匹配的字符串; 如果要替换全部得 ,则需要全局匹配
'hello world'.replace(/o/, 'javascript')// 默认替换第一个
'hello world'.replace(/o/g, 'javascript') // 全部替换
- match() :找到一个或者多个正则表达式匹配的结果数组,
var str = 'hella world';
// let res = str.match(/o/g); // 如果有全局修饰符g 结果是一个数组 ['o', 'o']
let res = str.match(/o/);
console.log(res);
/* // 没有全局修饰符g的结果解析:0: "o" // 索引值 匹配的结果(数组中的内容的索引值)groups: undefined index: 4 // 匹配的字符在指定的字符串中第一次出现位置的索引值input: "hello world" // 匹配的指定的字符length: 1 // 数组的长度*/
- search() :匹配指定的字符串中是否含有指定的字符; 它返回匹配到的位置索引,或者在失败时返回-1。
var str = 'hello';// var res = str.search(/e/)var res = str.search(/a/)console.log(res);
- split() : 字符串的分割
var str = 'haksdf2324hwehej2313jkfghwer5345634adf';var res = str.split(/\d{1,}/)console.log(res);
正则表达式 RegExp相关推荐
- mysql正则表达式regexp_mysql - 正则表达式 RegExp
-- mysql 正则表达式 RegExp -- 操作符 -- ^ 匹配输入字符串的开始位置. -- $ 匹配输入字符串的结束位置. -- . 匹配除 "\n" 之外的任何单个字符 ...
- javascript类型系统——正则表达式RegExp类型
原文:javascript类型系统--正则表达式RegExp类型 × 目录 [1]对象 [2]实例属性 [3]静态属性[4]实例方法 前面的话 前面已经介绍过javascript中正则表达式的基础语法 ...
- JS安全域名验证,安全域名效验,安全域名检查,正则表达式RegExp检查域名,截取字符串检查域名,检查域名url前缀的域名部分是否包含指定域名
JS安全域名验证,安全域名效验,安全域名检查,正则表达式RegExp检查域名,截取字符串检查域名,检查域名url前缀的域名部分是否包含指定域名 安全域名列表 var DomainArray=['run ...
- php正则判断是否包特殊符号,正则表达式(RegExp)判断文本框中是否包含特殊符号...
前言 有时,我们希望判断文本框中用户输入的字符是否含有特殊符号(*/#$@),就像用户注册时密码框的填写. demo 利用 RegExp 对象,能很优雅的实现以上需求: // even(文本框内容) ...
- mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法
Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...
- 6/7 SELECT语句:过滤(正则表达式REGEXP)
序号 说明 操作 1 REGEXP(正则表达式) LIKE替换成REGEXP 2 匹配任意1个字符 元字符:. 3 OR匹配 | 4 匹配几个字符之一 [a|b] 5 匹配除指定字符外的字符 [^a| ...
- JavaScript 正则表达式(RegExp对象、属性、方法、String支持)
内容来源:JavaScript RegExp 对象参考手册 http://www.w3school.com.cn/js/jsref_obj_regexp.asp RegExp 对象 RegExp ...
- JavaScript正则表达式----RegExp类型, 代码说明简单易懂
RegExp 正则表达式定义 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具.匹配原则: 贪婪匹配 直接量语法 /pattern(匹配规则)/attributes(属性) 创建 ...
- JavaScript正则表达式 RegExp验证手机号码
直接上代码 <div class="phone"><input type="text" id="phone">< ...
最新文章
- 如何通过Bit-Z的场外交易购买BZ?(新手图文攻略)
- TripleDES类 3des加密算法实现
- 儿童学文字编程python_手把手教你python数字知识
- python中的字典和集合_Python 字典和集合
- EF CodeFirst类生成器
- ue4 4.27源码下载
- 一文理清Apache Spark内存管理脉络
- 建立PCI网卡无盘工作站自动上网(转)
- 记录docker修改mysql映射端口
- 股票模拟交易日志(七)
- 基于android的个人理财软件 android stu_Android聊天软件开发(基于网易云IM即时通讯)——注册账号(二)...
- linux 下使用isign 签名ipa包
- Solidworks如何为装配体绘制剖面视图
- 【Python】cannot import name ‘ParserError‘ from ‘dateutil.parser‘
- PageAdmin如何修改后台页面标题。
- 利用DISM修复WIN11的系统组件错误
- MT6737 Android N 平台 Audio系统学习----录音到播放录音流程分析
- mysql给定一段日期,获取日期范围内的每一天
- 图像处理45-grabCut图像分割
- Windows Server 2008 IP策略关闭135端口
热门文章
- 人脸识别SeetaFace2原理与代码详解
- android ble蓝牙接收不到数据_Android BLE蓝牙开发-读写数据 获取UUID
- 论文阅读-A cooperated shuffled frog-leaping algorithm for distributedenergy-efficient hybrid flow ...
- 计算机模拟泊松分布,第19讲 计算机模拟matlb.ppt
- SnnGrow快讯:微软 Win7/8.1 今日结束支持,不会再获得安全更新、AI工程化进程加速,人工智能需要怎样的数据?
- 在cmd控制台输出汉字时出现乱码
- 游戏策划全接触之游戏剧本篇-----原创
- 汽车几种变速器的结构特点
- 普通人可以做的3个靠谱副业,副业成刚需,上班不易
- xcode以及mac常用快捷键