正则表达式介绍
正则表达式的引入
如何获取一个字符串中的数字字符,并按数组形式输出,如:Dgfhfgh254bhku289fgdhdy675gfh输出: [254,289,675]
分析:循环用charAt()的方法获取到每一个子字符串,判断他是不是在0~9之间,是就把他扔到准备好的数组里
const str = "Dgfhfgh254bhku289fgdhdy675gfh';
const reg = /\d+/g
const array = str.match(reg);
console.log(array);
正则表达式常用方法
1.显式定义(构造函数)
let 变量名 = new RegExp("正则表达式模式");
let myregex = new ReExp("\d+");
2.隐式定义(字面量)
let 变量名 = /正则表达式模式/
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));
//输出['254', index: 7, input: 'Dgfhfgh254bhku289fgdhdy675gfh', groups: undefined]
正则表达式字符
常用元字符
连接符-范围
限定符-量词
定位符-边界
^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 = /\bis\b/;
var str = "He is a boy, This is a dog.Where is she? ";
str.match(reg);
//只匹配第一个
//正则后加g匹配所有的
var reg = /\bis\b/g;
特殊转义符
- \f 匹配换页符
- \n 匹配换行符
- \r 匹配回车符
- \t 匹配制表符
- \v 匹配垂直制表符
- \ 匹配\
- " 匹配 "
- ' 匹配 '
Unix系统里,每行结尾只有“<换行>”,即”\n”;
Windows系统里面,每行结尾是“<换行><回车 >”,即“\n\r”;
Mac系统里,每行结尾是“<回车>”,即”\n”;
优先级排序
贪婪模式与非贪婪模式
-
在贪婪(默认)模式下,正则引擎尽可能多的重复匹配字符
var str = 'a "witch" and her "broom" is one"; str.match( /".*"/g);
预计上面会匹配得到 witch和 broom两个字符串,运行上面的例子,却发现结果只匹配到 "witch" and her "broom" 一个字符串。之所以出现这个结局,是因为正则的贪婪模式在起作用
- 非贪婪模式
非贪婪模式和贪婪模式相反,可通过在代表数量的标示符后放置?来开启非贪婪模式,如 ? 、+? 甚至是 ?? 。在非贪婪模式下,正则引擎尽可能少的重复匹配字符
var str = 'a "witch" and her "broom" is one ';
str.match(/".*?"/g ) // "witch", "broom"