js中正则表达式的易错点
1. 匹配符部分匹配规则
- js的正则表达式总是匹配第一个满足匹配的,比如下面这个例子
var str = "aaab";
var pattern = /a+?b/;
console.log(pattern.exec(str));
程序输出:“aaab”
虽然上面加了问号是非贪婪匹配,但是正则表达式的字符匹配是从满足条件的第一个字符开始匹配的,故从第一个a开始匹配,又因为一定要和最后一个b进行匹配,故前面三个a必须全都要进行匹配。
操作符只能影响前面的一个字符,并不能影响前面的多个字符。
var str = "angel";
var pattern = /e?el?/;
console.log(pattern.exec(str));
- 程序输出:“el”
- 虽然是从正则表达式中第一个满足的进行匹配,但是最后面有一个l,e?匹配成功后后面的l就没法匹配成功了,故第一个e?并没有进行匹配。故最终返回“el”。
2. 分组匹配规则:
var str = "ab";
var pattern = /a|ab/;
console.log(pattern.exec(str));
- 程序输出:“a”
- 将分组中从左到右按顺序和str中字符串进行匹配,一旦匹配上就不再将分组中的其它字符和str进行匹配,故此程序中分组中的ab都没有得到机会和str中的字符串进行匹配。
3. 注意^的不同用法
var pattern1 = /[^0-9]/ //在字符类中的‘^’号表示非的意思,此代码中的意思就是表示非数字
var pattern2 = /^js/ //这里表示的是首匹配,也就是要匹配的字符串前两个字母必须是js才能匹配成功,若str = “ja”,则也匹配不成功返回null
4. 不要忘记转义
- 在使用构造函数声明正则表达式时,在RegExp()中传入参数时,如果用到\一定不要忘记进行转义,如下面的代码所示:
var pattern =new RegExp("\\b"+"str"+"\\b") ;
// "\\b"+"str"+"\\b" === /\bstr\b/
var pattern1 =new RegExp("\b"+"str"+"\b") ;
// "\b"+"str"+"\b" === / str /
5. 正则表达式对象中lastIndex属性
- 开始时lastIndex的值为0,利用全局匹配时,每当我们执行一次pattern.exec(str);lastIndex的值会增加到当前匹配完后的字符的下一个位置,一直增加。当我们最后匹配结束返回null时,lastIndex的值变为0.
- 非全局匹配时,lastIndex的值永远是0.
- 代码如下:
var str = "js js js js";
var pattern = /js/g;
console.log("lastIndex = "+pattern.lastIndex);
console.log(pattern.exec(str));
console.log("lastIndex = "+pattern.lastIndex);
console.log(pattern.exec(str));
console.log("lastIndex = "+pattern.lastIndex);
console.log(pattern.exec(str));
console.log("lastIndex = "+pattern.lastIndex);
console.log(pattern.exec(str));
console.log("lastIndex = "+pattern.lastIndex);
console.log(pattern.exec(str));
console.log("lastIndex = "+pattern.lastIndex);
- 运行结果:

6. exec VS match
- exec是正则表达式实例的方法,match是字符串对象的方法
- exec: 无论是否是全局匹配都会返回分组中匹配到的内容,在全局匹配中,匹配到的内容只会返回当前匹配的内容,而不会全部返回.
- match:只有在非全局匹配时才会返回分组中的内容,在全局匹配中会将匹配到的内容全部返回。
- 示例代码:
var str = "js js js";
var pattern = /(j)s/g;
console.log("全局匹配match得到的内容:");
console.log(str.match(pattern));
console.log("全局匹配exec得到的内容:");
console.log(pattern.exec(str));
运行结果:

更新中,如有错误欢迎指正…
js中正则表达式的易错点的更多相关文章
- js课程 4-12 js中正则表达式如何使用
js课程 4-12 js中正则表达式如何使用 一.总结 一句话总结: 1.js正则表达式手册取哪里找? w3cschool或者菜鸟教程->找到js正则表达式->完整的RegExp参考手册这 ...
- js中正则表达式使用
js中使用正则表达式,除了了解正则表达式基本的匹配规则外.还需要了解下面的基本的知识: python,js,groovy这些脚本语言都有在线调试的网站,可以在线测试是否有语法错误,用起来也很方便. v ...
- js中正则表达式与Python中正则表达式的区别
今天女票让我帮她写一个js中的正则,来提取电话号码,对于正则规则来说,js与python是基本没有区别的,重点的区别是在一些函数与方法中. python中的正则提取: import re str = ...
- RegExp正则表达式(三)–js中正则表达式的定义
在js中,RegExp正则表达式的定义有两种方式:一种是普通方式,另一种是构造函数方式.无论是那种定义正则表达式的方式,它们都会返回RegExp对象. 普通方式定义正则表达式的格式 语法: var 变 ...
- 在js中正则表达式验证小时分钟,将输入的字符串转换为对应的小时和分钟
文章目录 1.预备知识 2.在js中的代码片段 3.测试结果 1.预备知识 splict()方法 Date()的相关方法 setHours()的用法 2.在js中的代码片段 //验证小时和分钟 var ...
- JS中正则表达式
正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具.简单来说正则表达式就是处理字符串的,我们可以用它来处理一些复杂的字符串. 1.创建方式 pattern(模式):描述了表达式 ...
- JavaScript基础&实战 JS中正则表达式的使用
文章目录 1.正则表达式 1.1 代码 1.2 测试结果 2.splict | search 2.1 代码 2.2 测试结果 1.正则表达式 1.1 代码 <!DOCTYPE html> ...
- js中正则表达式 ---- 现成
1 . 校验密码强度 密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间. ^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$ 2. 校验中 ...
- js中正则表达式的模式匹配
参考Javascript权威指南(第6版)第10章 1.正则表达式的定义 正则表达式有两种定义方法,通常使用直接量方式. (1)直接量 var pattern = /\d$/; var pattern ...
随机推荐
- python3 之 文件read方法(read、readline、readlines)
目录 一.read方法 二.readline方法 三.readlines方法 正文 python3中,读取文件有三种方法:read().readline().readlines(). 此三种方法,均支 ...
- Redis集群同步问题
之前被面试官问到:Redis集群中主从数据同步是从库异步读取主库,那么Redis集群其他主与主之间的数据是怎么共享的呢?或者说是怎么同步的? emmmm……当时我就懵逼了,这不是考试范围啊卧槽~只能老 ...
- Ubuntu中使用Nginx+rtmp模块搭建流媒体视频点播服务
1. 背景 不知不觉笔者来到流媒体部门已经一年半多了,积攒了不少的流媒体知识,但平时工作也比较忙,很少进行总结性的梳理,最近准备花几个周末时间写一个流媒体系列的实践文章,也算是给自己做总结的同时帮助有 ...
- Mysql操作之查询语句
查询语句: select 查询列表 from 表名 where 筛选条件; 去重:select distinct 查询列表...... 选择全部:* 起别名:select 查询列表 as 别名 fro ...
- nginx常用模块(三)
Nginx常用模块(三) ngx_http_proxy_module模块配置(http或https协议代理) proxy_pass URL; 应用上下文:location, if in locatio ...
- linux alias(命令别名)
alias:获取定义的所有命令别名 alias NAME='COMMAND':定义别名 unalias NAME:撤销别名
- Win10 SQLServer 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
环境:Win10+SQLServer2014 场景:在SQLServer导入Excel时,选择Excel2007格式,提示:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供 ...
- hashtable基础
- tabBarItem是模型,只有控件才有textColor属性
如果通过模型设置控件的文字颜色,只能通过文本属性(富文本:颜色,字体,图文混排,空心)
- 《Windows内核安全与驱动开发》 5.1&5.2 内核与应用方面的编程
<Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发> 5.1&5.2 内核与应用方面的编程 一.生成控制设备 如果一个驱 ...