JavaScript正则详谈

学过JavaScript的小伙伴应该都知道正则表达式,它简直让我们又爱又恨。
首先正则表达式是什么?

正则表达式的概念

正则表达式(regular expression)是一个描述字符模式的对象。ECMAScript 的 RegExp 类,表示正则表达式,而 String 和 正则表达式都定义了进行强大的【模式匹配】和【文本检索】与【替换】的函数。
它可以简单地操作字符串,并完成一系列的操作,可以省下我们大量的时间和代码,这边是我们对它爱了的原因。
例如:如果正常操作字符串,找出字符串中的数字,需要将字符串遍历,并一一比较每一个字符,将是数字的字符拿出来,比较麻烦;而是用正则表达式只需要一句语句就可以实现。

var arr = str.match(/\d+/g);
//str为要查找的字符串

正则表达式的创建

说到创建,那肯定就是字面量方式和构造函数方式了,我们学过的数组、对象、字符串等等都是有这两种方式创建的。

字面量方式:

var reg1 = /hello/ig;

构造函数方式

var reg2 = new RegExp("hello","ig"); 

我们一般常用的是使用字面量创建正则表达式,构造函数创建方式不常用。

正则表达式的使用

正则的方法

test方法:用来检测字符串是否符合正则的标准

  • 语法:正则.test(字符串)
  • 返回值为布尔类型
  • test可以检测字符串是否包含正则表达式的内容
  • 如果检测字符串是否为某个字符串,可以在规则前加^,在规则后加$,表示开头和结尾之间的内容
var str = "abcdefg";
var reg1 = /cd/;
var reg2 = /abcdefgh/;
var reg3 = /^cd$/;
console.log(reg1.test(str));//true
console.log(reg2.test(str));//true
console.log(reg3.test(str));//false

exec :利用正则规则,在字符串之中进行匹配,并把匹配的结果返回回来

  • 语法:正则.exec(字符串)
  • 返回数组[要匹配的字符串,下标,在哪个字符串里匹配,组]
var str = "abcdefg";
var reg1 = /cd/;
console.log(reg1.test(str));//["cd",index:2,input:"abcdefg",groups:"undefined"]

字符串的方法

search:查找字符串中是否有满足正则条件的内容,相当于加强版的indexOf

  • 语法:字符串.search(正则)
  • 返回值:有的话返回满足条件的索引,没有返回-1
var str = "abcdefg";
var reg1 = /cd/;
var reg2 = /hi/;
console.log(str.search(reg1));//2
console.log(str.search(reg2));//-1

match:在字符串之中匹配符合规则的内容, 然后装进一个新数组里

  • 语法:字符串.match(正则)
  • 返回值 :
    如果只匹配了一个内容,那么返回数组[要匹配的字符串,下标,在哪个字符串里匹配,组],如果match匹配到了多个内容,那么这个时候直接返回匹配的字符串
  • g:搜索全局,不加g,match之后搜索一个,效果和exec相同
var str = "abcdefgcdefgcde";
var reg1 = /cd/;
var reg2 = /cd/g;
console.log(str.match(reg1));//["cd",index:2,input:"abcdefg",groups:"undefined"]
console.log(str.match(reg2));["cd","cd","cd"]

replace:是将字符串中满足正则条件的字符串换掉

  • 语法:字符串.replace(正则,要替换的字符串)
  • 返回值:替换后的字符串
var str = "abcdefgcdefgcde";
var reg1 = /cd/;
var reg2 = /cd/g;
console.log(str.replace(reg1,""));//abefgcdefgcde
console.log(str.replace(reg2,""));//abefgefge
console.log(str.replace(reg2,"*"));//ab*efg*efg*e

正则表达式的组成

元字符

  • 正则表达式元字符是包含特殊含义的字符。它们有一些特殊功能,可以控制匹配模式的方式。
var reg = /[abcdef]/;
  • 无论元字符里有多少内容,只能表示一位的多种情况
  • 元字符存在简写情况,比如/\w/表示数字字母下划线,相当于/[a-zA-Z0-9_]/
    元字符

限定符

  • 我们又称之为量词,表示数量 限定符
var reg = /[\d]{4,10}/;//表示数字0-9一共4-10位

边界符

^:表示开头
$:表示结尾
边界符是限定字符串的开始和结束的

var reg3 = /^cd$/;//表示从c开始到d结束

特殊符号

特殊符号

标示符

我们又称之为修饰符,用来修饰规则
修饰符

正则的应用

常用正则1
常用正则2常用正则3
看到这里,是不是突然明白了对正则的恨?
正则它可以简化我的代码,但是使得逻辑更加紧凑,是不是写正则写地头昏脑涨?
别看它挺复杂,只要我们明白了逻辑,勤加练习,正则还不是得乖乖成为我们手中的利器?
那么学好正则,从我做起!

发布了4 篇原创文章 · 获赞 15 · 访问量 1403

猜你喜欢

转载自blog.csdn.net/qq_31152975/article/details/104881882