正则表达式基础
概念
- 正则表达式用于定义一些字符串的规则, 计算机可以根据正则表达式,来检查一个字符串是否符合规则
- 获取将字符串中符合规则的内容提取出来
作用
- 检查数据格式,获取符合要求的数据
正则表达式对象的定义(创建)
创建正则表达式对象
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]:匹配1,2,3,4,5,6 当中的任意一个
[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)/
:匹配jpg
、png
、gif
、jpeg
中的一个
正则表达式高阶
概述
- 正则表达式中有一些符号具有特殊的含义
元字符
常见元字符
.
:会匹配一个除换行符以外的任意一个字符。如果想要匹配.
本身。需要通过转义字符\
来处理+
:会匹配前面的组[]
至少一次。等同于{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 ]
search()
是一个字符串方法,可以将其与正则表达式一起使用。可以将正则表达式作为参数传递给它,以在字符串中搜索匹配项。
返回值
- 方法返回第一个匹配项在整个字符串中的位置(
索引
),如果没有匹配项,则返回-1
。
var strText = "hello china,i love china";
var regex = /china/;
console.log(strText.search(regex)); // 6
replace()
在字符串中搜索指定的值 或 符合正则表达式的值 将其替换为另一个值
两个参数:
- 要搜索的值
- 要替换的新值
返回值
- 返回一个包含被替换后的
新字符串
,需要注意的是,它不会改变原始字符串,并且只会替换搜索到的第一个值。
var strText = "hello world,i love world";
var regex = /world/;
console.log(strText.replace(regex, "china")); // hello china,i love world
若被替换的参数值为正则表达式并且为全局模式,则可以将所有 匹配的字符串,替换为新的值
split()
根据符号或正则表达式对字符串进行分割
参数:
- 必须:字符串或正则表达式
- 可选,设置返回数组的最大长度
返回值
- 返回一个数组
字符串.split(正则表达式);
例子:提取字符串中的所有数据
var str ="张三#李四@#王五--赵六@#%田七";
var reg = /[\#@\-\%]+/; 需要进行转义
str.split(reg); //["张三", "李四", "王五", "赵六", "田七"]