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 之 类属性与实例属性
1.类属性与实例属性 类属性就相当与全局变量,实例对象共有的属性,实例对象的属性为实例对象自己私有. 类属性就是类对象(Tool)所拥有的属性,它被所有类对象的实例对象(实例方法)所共有,在内存中只存 ...
- Res2net:多尺度骨干网络结构
<Res2Net: A New Multi-scale Backbone Architecture> 来自:南开大学程明明组 论文:https://arxiv.org/abs/1904.0 ...
- linux服务器cpu信息查看详解
在linux系统中,提供了/proc目录下文件,显示系统的软硬件信息.如果想了解系统中CPU的提供商和相关配置信息,则可以查/proc/cpuinfo.但是此文件输出项较多,不易理解.例如我们想获取, ...
- Linux中shell基础、重定向、管道符、环境变量
1.什么是shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器).它接收用户输入的命令并把它送入内核去执行.起着协调用户与系统的一致性和在用户与系统之间进行交互的 ...
- Prometheus 自动发现
目录 简介 环境说明 静态配置 重新加载配置文件 基于文件发现配置 重新加载配置文件 添加主机测试 基于DNS的A记录 修改配置文件 重新加载配置文件 基于DNS的SRV记录自动发现 修改配置文件 重 ...
- django初始化
Django 版本 安装 pip安装 pip install django 安装最新版本的 pip install django==1.11.11 安装指定版本的 验证安装 直接去代码中调用djang ...
- python元类深入解析
元类 什么是元类 元类是类的类,是类的模板(就如对象的模板是类一样) 元类的实例为类,类的实例为对象 元类是用来产生类的 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,是运行时动 ...
- C语言l博客作业05
问题 回答 这个作业属于哪个课程 C语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/9830 我在这 ...
- 检测是否引入jQuery
if (typeof jQuery != 'undefined') { document.write("jquery已经被加载"); } else { document.write ...
- Xcode 10 Error: Multiple commands produce
目录 Xcode 9.4.1运行react-native 可以,但是在Xcode 10运行报错,报错信息如下: 解决方法 1. 选择 File > Project Settings (或者 Fi ...