1.什么是正则表达式
正则表达式是由一个字符序列形成的搜索模式。
当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。
正则表达式可以是一个简单的字符,或一个更复杂的模式。
正则表达式可用于所有 文本搜索 和 文本替换 的操作。
2.语法
/正则表达式主体 / 修饰符(可选)
修饰符:
// 1. g : 全局匹配, 不受惰性原则限制;
// 2. i : 忽略大小写!
// 3. y : 忽略5位unicode编码的特殊字符!
3.正则表达式创建
1. // 构造函数创建正则表达式;
var reg1 = new RegExp("a");
2. // 字面量形式创建正则表达式, 表达内容不能为空!
var reg2 = /a/;
4.正则表达式匹配
// // 字符串使用正则的工具;
// // string.match( 正则表达式 )
// // 返回值是一个数组 :
// // 里面装的是符合条件的字符!
var name_list = "刘彦祖纪彦祖于彦祖杨彦祖李彦祖吴彦祖";
var reg = /于彦祖/;
var res = name_list.match( reg );
console.log( res ); ---于彦祖
var reg = /于彦祖|刘彦祖/g;
var res = name_list.match( reg );
console.log( res );
多规则匹配
()控制运算顺序
[] 元字符 表示一个字符的规则
var name_list = "刘彦祖纪彦祖于彦祖杨彦祖李彦祖吴彦祖第五彦祖公孙彦祖欧阳彦祖";
var reg = /( [杨刘于纪李] | 欧阳 | 公孙 )彦祖/g
var res = name_list.match( reg );
console.log( res );
元字符规则简写
// 1. 数字 [0-9] 简写 : \d
// 非数字 [^0-9] 简写 : \D
// 2. 空白字符 [ \t\b\s\r\n] 简写 : \s
// 非空白字符 [^ \t\b\s\r\n] 简写 : \S
// 3. 数字字母下划线 [0-9a-zA-Z_] 简写 : \w
// 非数字字母下划线 [^0-9a-zA-Z_] 简写 : \W
组合
// var reg = /[\s\S]/ // 表示所有字符!
// 简写方式 : . 但是这个简写不包括回车符;
5.量词
// 量词在正则之中使用 {} 表述 ;
// 1. { m , n } 最少出现 m 次 , 最多出现 n 次;
// 2. { m } 只能出现m次;
// 3. { m , } 最少出现 m 次 , 最多出现无数次;
// var reg = /a{3,}/g;
// 量词匹配也存在简写 :
// + : { 1, } 最少出现一次, 最多不限次;
// * : { 0 , } 最少出现0次, 最多出现无限次; 慎用!
// ? : { 0 , 1 } 可有可无!
贪婪与非贪婪
* + 表示贪婪模式
?跟在*或者+后边用时,表示懒惰模式。也称非贪婪模式。
a*b,它将会匹配最长的以a开始,以b结束的字符串。
如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
a*?b匹配最短的,以a开始,以b结束的字符串。
如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。
6.正则表达式使用字符串方法
string.search()
string.replace(正则表达式,要替换的内容)
例子:字符串替换功能
var string = '<div class="hello" data-id="hello@">你好世界</div><div class="hello">你好世界</div><div class="hello">你好世界</div><div class="hello">你好世界</div><div class="hello">你好世界</div>'
需求:把里面的标签删除
目标:编写匹配标签的正则表达式,然后把匹配到的位置替换为“”(空字符串)
方法一 :贪婪模式
var reg = /<[^>]+>/g;
var res = string.replace( reg , "")
console.log( res );
方法二:懒惰模式
var reg = /<[\s\S]*?>/g;
var res = string.replace( reg , "")
console.log( res );
7.正则表达式-方法
test() 方法是一个正则表达式方法。
test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
var reg_phone = /1[3-9]\d{9}/;
reg_phone.test( phone.value ) →→→phone.value=hello world 13147918888 也会判定true。
// 注意 : 如果我们需要验证整体字符串符合规则, 那么我们需要使用 ^ 开头 $ 结尾运算;
// 注意 : ^ 只能放在正则表达式的开头 , $ 只能放在正则表达式的结尾!
var reg_phone = /^1[3-9]\d{9}$/;
exec()
exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
var string="hello world"
var reg=/o/g
var res1=reg.exec(string)
var res2=reg.exec(string)
console.log(res1,res2);