1. 正则表达式介绍
1-1 为什么要学习正则表达式
如何获取一个字符串中的数字字符,并按数组形式输出,如:
Dgfhfgh254bhku289fgdhdy675gfh
输出: [254,289,675]
分析:循环用charAt()的方法获取到每一个子字符串,判断他是不是在0~9之间,是就把他扔到准备好的数组里
用js的编程实现:
如果用正则表达式解答此题,会变得简单:
1-2 什么是正则表达式
正则表达式,全称“Regular expression”,在代码中常简写为regex、regexp或RE。正则表达式,就是用某种模式去匹配一类字符串的公式。遇到需要匹配(match)、查找(seach)、替换(replace)、判断字符串的情况发生使用正则表达式,是非常重要的手段。
1-3 如何定义正则表达式
正则表达式的定义共有2种方式:
1. 显式定义(构造函数)
let 变量名 = new RegExp("正则表达式模式");
2. 隐式定义(字面量)
let 变量名 = /正则表达式模式/
1-4正则表达式常用方法
举例:
let myregex = new ReExp("d+");
上面语句等价于下面:
let myregex = /d+/;
正则表达式常用方法:
1. test
正则去匹配字符串,如果匹配成功就返回真,匹配失败返回假
写法:正则.test(字符串)
如:
var str='abcdef';
var re=/b/;
alert(re.test(str));
2. search
正则去匹配字符串,如果匹配成功,就返回匹配成功的位置,如果匹配失败就返回-1
写法:字符串.search(正则)
如:
var str="abcdef";var re=/b/;
alert(str.search(re));
//返回1
var re=/w/;
//返回-1
var re=/B/;
//返回-1
3. match
正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null
写法:字符串.match(正则)
比如上面例子要找出数字
var str="dgfhfgh254bhku289fgdhdy675";
var re=/d+/g;
alert(str.match(re));
//输出2
4. replace
正则去匹配字符串,匹配成功的字符被新的字符串替换
replace的写法:字符串.replace(正则,新字符串)
如:
var str="aaa";
var re=/a/;
str=str.replace(re,"b");
alert(str);
//输出baa
5. exec
正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,index:表示第一个匹配的字符在原字符串中的位置,input:表示原字符串,groups:表示当初中命名的分组时匹配到的分组对象;如果匹配不成功,就返回null
写法:正则. exec(字符串)
比如上面例子要找出数字
var str="dgfhfgh254bhku289fgdhdy675";
var reg=/d+/g;
alert(reg.exec(str));
//输出2
普通字符就是a~z、0~9这类常见的字符。其中特殊字符又称为“元字符”。元字符之所以叫特殊字符,就是它的特点跟普通字符不一样。例如邮政编码中,我们限定只能输入6个数字,那“数字”这个概念怎么理解呢?这个时候我们就用到了元字符d来代替。
如: 028-8888888
var reg = /0d{2}-d{8}/
2. 正则表达式匹配HTML标签中的<h1>、<h2>、<h3>、<h4>、<h5>和<h6>
var reg = /<h[123456]/
var tel = '<h7>标题元素</h7>'
一、连接符简介
学习了正则表达式常用元字符,我们知道要想匹配数字,正则表达式就要这样写:
[123456789] [1-9]
其中[]表示匹配方括号内的任一字符。在正则表达式中,匹配数字或者英文字母的书写非常不方便。因此,正则表达式引入了连接符“-”来定义字符的范围。
限定符-量词
一、什么是定位符?
在正则表达式中,定位符,说白了,就是限定某些字符出现的位置。
常用的正则表达式定位符如下:
二、举例:
^once
这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串。例如该模式与字符串"once upon a time"匹配,与"There once was a man from NewYork"不匹配。正如如^符号表示开头一样,$符号用来匹配那些以给定模式结尾的字符串。
bucket$
这个模式与"Who kept all of this cash in a bucket"匹配,与"buckets"不匹配。字符^和$同时使用时,表示精确匹配(字符串与模式一样)
修饰符
一、修饰符
g: global 全文搜索,不添加,搜索到第一个匹配停止
i: ignore case 忽略大小写,默认大小写敏感
m: multiple lines 多行搜索
二、用法:
var reg = /bisb/;
var str = "He is a boy, This is a dog.Where is she? ";
str.match(reg);
只匹配第一个,
正则后加g匹配所有的
var reg = /bisb/g;
特殊转义符
正则特殊转义符
f 匹配换页符
匹配换行符
匹配回车符
匹配制表符
v 匹配垂直制表符
\ 匹配
" 匹配 "
' 匹配 '
Unix系统里,每行结尾只有“<换行>”,即” ”;
Windows系统里面,每行结尾是“<换行><回车 >”,即“ ”;
Mac系统里,每行结尾是“<回车>”,即” ”;
贪婪模式与非贪婪模式
在贪婪(默认)模式下,正则引擎尽可能多的重复匹配字符
贪婪写法:
var str = 'a "witch" and her "broom" is one';
str.match( /".*"/g);
非贪婪模式和贪婪模式相反,可通过在代表数量的标示符后放置 ? 来开启非贪婪模式,如 ? 、+? 甚至是 ?? 。在非贪婪模式下,正则引擎尽可能少的重复匹配字符
var str = 'a "witch" and her "broom" is one';
str.match(/".*?"/g ) // "witch", "broom"
1.已知邮箱字符串'zhousir028@qq.com'写正则匹配该邮箱字符串是否符合邮箱格式?
邮箱格式要求:
1. 必须包含@符号
2. @符号左右两边可以字母或数字或字母数字组合
3. 以.com结尾
2. 已知密码字符串'Zhousir12345' 写正则匹配密码是否符合密码强度规则?
密码强度规则: 1. 必须是大写字母开头
2. 密码包含字母和数字
3. 至少8位
3. 已知手机字符串'18012345678' 匹配中国手机号是否正则
中国手机号规则: 1. 以1开头
2.第二位是 3或5或8
3. 总共11位
4. 将字符串中单词is替换成 'are'字符串如下:
'He is a boy, This is a dog.Where is she?'