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中正则表达式的易错点的更多相关文章

  1. js课程 4-12 js中正则表达式如何使用

    js课程 4-12 js中正则表达式如何使用 一.总结 一句话总结: 1.js正则表达式手册取哪里找? w3cschool或者菜鸟教程->找到js正则表达式->完整的RegExp参考手册这 ...

  2. js中正则表达式使用

    js中使用正则表达式,除了了解正则表达式基本的匹配规则外.还需要了解下面的基本的知识: python,js,groovy这些脚本语言都有在线调试的网站,可以在线测试是否有语法错误,用起来也很方便. v ...

  3. js中正则表达式与Python中正则表达式的区别

    今天女票让我帮她写一个js中的正则,来提取电话号码,对于正则规则来说,js与python是基本没有区别的,重点的区别是在一些函数与方法中. python中的正则提取: import re str = ...

  4. RegExp正则表达式(三)–js中正则表达式的定义

    在js中,RegExp正则表达式的定义有两种方式:一种是普通方式,另一种是构造函数方式.无论是那种定义正则表达式的方式,它们都会返回RegExp对象. 普通方式定义正则表达式的格式 语法: var 变 ...

  5. 在js中正则表达式验证小时分钟,将输入的字符串转换为对应的小时和分钟

    文章目录 1.预备知识 2.在js中的代码片段 3.测试结果 1.预备知识 splict()方法 Date()的相关方法 setHours()的用法 2.在js中的代码片段 //验证小时和分钟 var ...

  6. JS中正则表达式

    正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具.简单来说正则表达式就是处理字符串的,我们可以用它来处理一些复杂的字符串. 1.创建方式 pattern(模式):描述了表达式 ...

  7. JavaScript基础&实战 JS中正则表达式的使用

    文章目录 1.正则表达式 1.1 代码 1.2 测试结果 2.splict | search 2.1 代码 2.2 测试结果 1.正则表达式 1.1 代码 <!DOCTYPE html> ...

  8. js中正则表达式 ---- 现成

    1 . 校验密码强度 密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间. ^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$ 2. 校验中 ...

  9. js中正则表达式的模式匹配

    参考Javascript权威指南(第6版)第10章 1.正则表达式的定义 正则表达式有两种定义方法,通常使用直接量方式. (1)直接量 var pattern = /\d$/; var pattern ...

随机推荐

  1. 01-MongoDB数据库基础

    一.MongoDB数据库基础 1.MongoDB数据库介绍 什么是MongoDB? MongoDB是非关系型数据库中的一种,是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情 ...

  2. [apue] 神奇的 Solaris pipe

    说到 pipe 大家可能都不陌生,经典的pipe调用配合fork进行父子进程通讯,简直就是Unix程序的标配. 然而Solaris上的pipe却和Solaris一样是个奇葩(虽然Solaris前途黯淡 ...

  3. 2019-11-6:ubuntu安装配置JAVA环境

    1,下载JAVA,官方java 18下载网站:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21331 ...

  4. ES6扩展运算符...

    对象的扩展运算符理解对象的扩展运算符其实很简单,只要记住一句话就可以: 对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中 let bar = { a: 1, b: 2 ...

  5. LESSON 4- Entropy and Asymptotic Equipartition Property

    1.        Entropy 2.        序列熵(无记忆,有记忆,马尔科夫) 3.   Fixed-to-variable-length codes  (给n个输出symbols进行变长 ...

  6. 品优购详情页---产品详细信息区域 iteminfo_wrap

    产品详细信息区域为整个大盒子命名为: iteminfo_wrap 1号盒子命名为:sku_name 2号盒子命名为:news 3号盒子命名为:summary step1:3个盒子搭建框架,以及完成前两 ...

  7. 【JavaEE】之MyBatis与原生JDBC、Hibernate访问数据库的比较

    首先来看一下原生JDBC访问数据库的代码: public static void main(String[] args) { // 数据库连接 Connection connection = null ...

  8. Centos 7.x 系统基础优化

    Centos 7.x 系统基础优化 1.更换国内yum源 删除系统带的centos官方yum源 rm -rf /etc/yum.repos.d/* 使用国内阿里云源 curl -o /etc/yum. ...

  9. STM32F4 阿波罗寄存器点亮LED灯

    学习步骤: 使用寄存器点亮LED灯,需要进行如下的步骤,LED灯属于外设部分,首先需要开启外设的时钟使能,然后LED灯是PB1口,(芯片是正点原子的阿波罗),接着定义GPIOB口的输出模式,为上拉.推 ...

  10. luogu P4981 父子

    题目背景 上演在各大学男生寝室的日常 :: A :A: "我没带纸,快来厕所救我!" B :B: "叫爸爸." A :A: "爸爸!" .. ...