正则表达式的基础
概述
JavaScript中使用 RegExp 对象来封装一个正则表达式,并提供相关的方法和属性。
创建方法
正则表达式的两种创建方法
字面量
let reg=/\bis\b/g; //g表示全文匹配
let str='He is a boy.This is a dog. Where is she?'
console.log(str.replace(reg,'IS'))
//He IS a boy.This IS a dog. Where IS she?
构造函数
let reg=new RegExp('\\bis\\b','g');
let str='He is a boy.This is a dog. Where is she?'
console.log(str.replace(reg,'IS'))
//He IS a boy.This IS a dog. Where IS she?
修饰符
g:全文搜索
i:忽略大小写
m:多行搜索
字符类
当需要匹配一类字符时,用[ ] 表示为一类
let str='a1b2c3d4'
console.log(str.replace(/[abc]/g,'x'))
//"x1x2x3d4"
字符类取反
用 ^ 表示选择的字符除外
范围类
需要匹配数字时,可以使用范围类。
如,[a-z]表示从a到z的任意字符,并包含其本身。
let str='a1b2c3d4z0'
str.replace(/[a-z]/g,'X')
//"X1X2X3X4X0"
str.replace(/[a-zA-Z0-9]/g,'*')
//"**********"
let str='2020-03-25'
str.replace(/[0-9-]/g,'0')
//"0000000000"
预定义类
. (点),除了回车符和换行符之外的所有字符。
\d,数字字符
\D,非数字字符
\s,空白符
\S,非空白符
\w,单词字符(包括字母、数字和下划线)
\W,非凡次字符(除字母、数字和下划线之外的字符)
边界
^:以xxx开始
$:以xxx结束
\b:单词边界
\B:非单词边界
量词
? :出现0次或1次
+:出现1次或多次
*:出现0次或多次
{n}:出现n次
{n,m}:出现n到m次
{n,}:出现n次或更多次
str='12345678'
//贪婪模式,尽可能多的匹配
str.replace(/\d{3,6}/g,'X') //"X78"
//非贪婪模式
str.replace(/\d{3,6}?/g,'X') //"XX78"
分组
如 Byron{3},表示对n匹配3次
(Byron){3},表示对Byron匹配3次
反向引用
使用 $n 的形式引用模式中分组匹配到的文本,n为索引,从1开始。
console.log('2020-03-04'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1'));
//"03/04/2020"
忽略分组
当不想捕获分组时,使用 ?:
console.log('2020-03-04'.replace(/(\d{4})-(\d{2})-(?:\d{2})/g,'$2/$3/$1'))
//"03/$3/2020"
console.log('2020-03-04'.replace(/(\d{4})-(?:\d{2})-(\d{2})/g,'$2/$3/$1'))
//"04/$3/2020"
//忽略分组后不存在编号,继续顺延往后编号
前瞻
正向前瞻,exp(?=assert)
负向前瞻,exp(?!assert)
exp和assert都是正则表达式,匹配到exp时还要判断assert是否符合,符合才会被匹配。只匹配exp。
console.log('a2*34v8'.replace(/\w(?=\d)/g,'X'))
//X2*X4X8
console.log('a2*34v8'.replace(/\w(?!\d)/g,'X'))
//aX*3XvX
ES6中的正则表达式
RegExp对象属性
global,是否全文搜索,默认false
ignoreCase,是否忽略大小写,默认false
multiline,是否多行搜索,默认false
lastIndex,当前表达式匹配内容的最后一个字符的下一位置
source,正则表达式的文本字符串
对象方法
test(str),用于测试字符串参数中是否存在匹配正则表达式模式的字符串,返回true或false
let phone='12345678910';
let reg=/^1\d{10}$/;
console.log(reg.test(phone)) //true
exec(str),一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回 null)。