JavaScript正则表达式


正则表达式基础

概念

  • 正则表达式用于定义一些字符串的规则, 计算机可以根据正则表达式,来检查一个字符串是否符合规则
  • 获取将字符串中符合规则的内容提取出来

作用

  • 检查数据格式,获取符合要求的数据

正则表达式对象的定义(创建)

创建正则表达式对象

var 变量 = new RegExp("正则表达式","匹配模式");
//使用typeof检查正则对象,会返回object
var reg = new RegExp("a"); //这个正则表达式可以来检查一个字符串中是否含有a
// 在构造函数中可以传递一个匹配模式作为第二个参数
u 默认值  匹配第一个
i   忽略大小写 
g  全局匹配模式

字面量创建正则表达式

//语法
var  变量= /正则表达式/匹配模式;
var reg=/[0-9]/;

正则表达式的方法

test()

  • 使用此方法可以用来检查一个字符串是否符合正则表达式的规则,如果符合则返回true,否则返回false

    reg = /[0-9]/;
    console.log(reg.test("1"));true
    

exec()

  • 判断某个数据是否满足正则表达式,返回匹配的那部分数据,若数据中有多个满足正则表达式,只返回满足条件的第一个

    var reg=/[0-9{10}]/;
    var text='1234567890  1112223330 7778889990';
    var result=reg.exec(text);
    console.log(result);//1234567890
    

基础语法

[ ]

可以匹配其中的任意一个字符,[]中的内容是或的关系,相当于|

  • [0-9]:匹配任意一个数字

    [123456]:匹配123456 当中的任意一个
    
  • [a-z] 匹配任意一个小写字母

  • [A-Z]匹配任意一个大写字母

  • [a-zA-Z]:匹配任意一个字母 或 [A-z] 任意字母

  • [0-9a-zA-Z]:匹配任意一个数字或字母

{}

用于描述组[ ]出现的次数:这里如果不进行限制,最多出现的次数不匹配,需要验证整个字符串。

  • {m,n}:表示前面的一个组至少出现m次,最多n次
  • {m}:表示前面的一个组固定次数m次
  • {m,}:表示前面的一个组至少m次
  • {,n}:表示前面的一个组至多n次

^以什么开头

  • /^[0-9]{3}/:以3个连续的数字开头
  • /^[a-z]/:以一个小写字母开头

$以什么结束

  • /[0-9a-zA-Z]{3}$/:以3个数字或字母结尾

/^正则表达式语法$/:匹配整个的字符串必须符合此规则,以什么开头,以什么结尾

/^[a-zA-Z]{10}$/;//表示整个字符串是10个字母

() 匹配固定长字符

  • /(jpg|png|gif|jpeg)/:匹配jpgpnggifjpeg中的一个

正则表达式高阶

概述

  • 正则表达式中有一些符号具有特殊的含义元字符

常见元字符

  • .:会匹配一个除换行符以外的任意一个字符。如果想要匹配.本身。需要通过转义字符\来处理
  • +:会匹配前面的组[]至少一次。等同于{1,} (最大限度的匹配)
  • ?:会匹配前面的组[]一次或者没有。等同于{0,1}
  • *:会匹配前面的组[]至少0次。等同于{0,}
  • \w:匹配一个单词字符或下划线。等同于[0-9a-zA-Z_]
  • \d:匹配一个数字。等同于[0-9]

常用正则表达式应用

  • 汉字:/^[\u4e00-\u9fa5]{0,}$/

  • Email邮箱地址:/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/

  • 手机号码:/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/

正则表达式匹配模式

概念

  • 根据不同的需求,正则表达式提供了针对不同场景下使用的模式。常见的模式有3种:u(默认),g(全局),i(不区分大小写)

分类

  • u(默认):匹配最近的那一项
  • g(全局):匹配所有满足的项
  • i(不区分大小写):在匹配时不考虑大小写

正则表达式在字符串中的应用

match()

与字符串一起使用以检查字符串和正则表达式 regex 之间的匹配,以正则表达式为参数。

str.match(regex);

返回值(数组)

  • 如果正则表达式包含一个 g 标记,即为全局匹配,它将返回一个包含所有匹配项的数组;
  • 如果正则表达式没有 g 标记,它将返回一个包含第一个匹配项的数组;
  • 没有匹配项,返回null
//匹配模式为  g  全局匹配模式
var strText = "Hello China";
var regex = /[A-Z]/g; // 大写字母正则表达式
console.log(strText.match(regex)); // [ 'H', 'C' ]
//匹配模式为默认
var text = 'Hello World';
var regex = /[A-Z]/; 
console.log(text.match(regex)); // [ 'H', index: 0, input: 'Hello World', groups: undefined ]

是一个字符串方法,可以将其与正则表达式一起使用。可以将正则表达式作为参数传递给它,以在字符串中搜索匹配项。

返回值

  • 方法返回第一个匹配项在整个字符串中的位置(索引),如果没有匹配项,则返回 -1
var strText = "hello china,i love china";
var regex = /china/;
console.log(strText.search(regex)); // 6

replace()

在字符串中搜索指定的值 或 符合正则表达式的值 将其替换为另一个值

两个参数:

  1. 要搜索的值
  2. 要替换的新值

返回值

  • 返回一个包含被替换后的新字符串需要注意的是,它不会改变原始字符串,并且只会替换搜索到的第一个值
var strText = "hello world,i love world";
var regex = /world/;
console.log(strText.replace(regex, "china")); // hello china,i love world

若被替换的参数值为正则表达式并且为全局模式,则可以将所有 匹配的字符串,替换为新的值

split()

根据符号或正则表达式对字符串进行分割

参数:

  1. 必须:字符串或正则表达式
  2. 可选,设置返回数组的最大长度

返回值

  • 返回一个数组
字符串.split(正则表达式);
例子:提取字符串中的所有数据
var str  ="张三#李四@#王五--赵六@#%田七";
var reg = /[\#@\-\%]+/; 需要进行转义
str.split(reg); //["张三", "李四", "王五", "赵六", "田七"]

文章作者: 时光路人
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 时光路人 !
评论
  目录