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. go modules 学习

    go modules 学习 tags:golang 安装 只需要golang的版本是1.11及之后的,这个模块就内置好了 环境变量 (1) 配置GoLang的GOROOT (2) 可以不配置GoLan ...

  2. vue 学习 渲染、v-指令

    vue渲染 在组件中data是一个方法里面的值要是一个对象return出去 export default { name: "HelloWorld", data() { return ...

  3. 【论文阅读】Deep Clustering for Unsupervised Learning of Visual Features

    文章:Deep Clustering for Unsupervised Learning of Visual Features 作者:Mathilde Caron, Piotr Bojanowski, ...

  4. 【2018寒假集训Day 1】【位运算】生成字符串

    生成字符串(strs) [问题描述] 假设字符串只由字符“0”,“1”,“”组成,其中字符“”表示该字符可由 字符“0”或“1”替代. 现有一些字符串,根据这些字符串生成所有可生成的字符串.如: {1 ...

  5. kipmio占用cpu资源过高

    虽然这是一个利用空余的CPU资源进行一些接口自动调节的任务,但看着占那么多的资源还是怕出意外. 可以临时降低 echo 100 > /sys/module/ipmi_si/parameters/ ...

  6. [需求设计]从一个小需求感受Redis的独特魅力

    分享一个简单的小需求应该怎么设计实现以及有关Redis的使用 Redis在实际应用中使用的非常广泛,本篇文章就从一个简单的需求说起,为你讲述一个需求是如何从头到尾开始做的,又是如何一步步完善的.之前写 ...

  7. Linux目录结构-中部

    第1章 /proc目录下 1.1 /proc/cpuinfo 系统cpu信息 [root@nfsnobody ~]# cat /proc/cpuinfo                  一般常用的是 ...

  8. hasChildNodes()

    hasChildNodes():方法可以用来检查一个给定的元素是否有子节点. booleanValue = element.hasChildNodes 这个方法将返回一个布尔值true或false.如 ...

  9. java 获取当前年份 月份 日期

    import java.util.Calendar; public class Main {  public static void main(String[] args) {    Calendar ...

  10. 使用Git上传文件到github

    第一次利用git连接github时往往都不会勾选Initialize this repository with a README,这样的的确确是简单了,但是如果我们需要勾选,勾选了之后应该怎么办呢?1 ...