这是第13篇学习笔记!
让学习“上瘾”,成为更好的自己!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>RegExp_type</title>
<script>
/*
一,创建一个正则表达式对象:
1,方法一:字面量
var expression = /pattern / flags;
模式:任何简单或复杂的正则表达式,可以包含字符类、限定符、分组、向前查找和反向引用
标志:每个正则表达式可以1个或者多个标志,用以表明正则表达式的行为【g,i,m】
g:全局模式
i:不区分大小写模式
m:多行模式
模式中的元字符都必须被转义!
2,方法二:RegExp()构造函数
var pattern1 = new RegExp('[bc]at','i'); // 两个参数都是字符串
模式中的元字符都必须被“双重转义”!
普通字符串 --> 正 则表达式字符串
'\' --> '\\'
'\\' --> '\\\\'
【规律】:乘以2!
【注意】正则表达式字面量和RegExp()构造函数创建的正则表达式不一样!
正则表达式字面量始终共享同一个RegExp()实例
使用构造函数创建的每个新RegExp实例都是一个新的实例
二,RegExp实例属性
global,igoreCase,multiline:布尔值
lastIndex:表示开始搜索下一个匹配项的字符位置,从0算起
source:正则表达式的字符串表示
三,RegExp实例方法
exec():接收一个要应用模式的字符串,然后返回包含第一个匹配项信息的数组实例;没有匹配项时返回null
数组实例包含两个属性:index --> 匹配项在字符串中的位置
input --> 应用正则表达式的字符串
test(): 接收一个字符串参数,在模式与该参数匹配的情况下返回true,否则,返回false
常用于if()语句
toLocaleString(),toString():返回正则表达式的字面量
valueOf():返回正则表达式本身(与字面量看起来一样)
四,RegExp构造函数属性(常用6个)长属性&短属性
“最近一次”:
input
lastParen
lastMatch
“input字符串”:
leftContext
rightContext
“布尔值”:
multiline
9个用于存储捕获组的构造函数的属性,RegExp.$1,RegExp.$2,...,RegExp.$9
*/
// 创建一个正则表达式
// var pattern2 = /\[bc\]at/i; // 匹配第一个“[bc]at”,不区分大小写
// var pattern1 = /[bc]at/i; // 匹配第一个‘bat’ or ‘cat’,不区分大小写
// //=========等价书写==========
// var pattern1 = new RegExp('[bc]at','i');
// var pattern2 = new RegExp('\\[bc\\]at','i');
// console.log('fdsdnfsdf');
// console.log('fdsd\fsdf');
// var re = null,
// i;
// for(i=0;i < 10;i++){
// re = /cat/g; // 字面量为‘/cat/g’,循环体只为/cat/创建了一个RegExp实例
// re.test('catastrophe');
// }
// for(i=0;i < 10;i++){
// re = new RegExp('cat','g');
// re.test('catastrophe');
// }
// ECMAScript 5明确规定,使用正则表达式字面量必须向直接调用RegExp()构造函数一样,每次都创建一个新的RegExp实例
// 实例属性
// var pattern1 = /\[bc\]at/g;
// var pattern2 = new RegExp('\\[bc\\]at','g');
// console.log(pattern1.ignoreCase);
// console.log(pattern1.source);
// console.log(pattern2.source);
//【注意】source属性始终返回字面量形式所用的字符串
// var test = 'mom and dad and baby';
// var pattern3 = /mom( and dad( and baby)?)?/gi; // 包含两个捕获组
// var matches = pattern3.exec(test);
// console.log(typeof matches);
// console.log(matches.index);
// console.log(matches.input);
// console.log(matches[0]); // 'mom and dad and baby'
// console.log(matches[1]); // ' and dad and baby'
// console.log(matches[2]); // ' and baby'
// 数组中,第一项是与整个模式匹配的字符串,然后由外向内,依次匹配(如果模式没有捕获组,则该数组只包含一项)
// 对于exec()方法:
// 1, 是否设置全局标志(g),结果都始终返回一个匹配项
// 2, 不设置全局标志(g),在同一字符串多次调用exec()将始终返回第一个匹配项的信息
// 3, 设置全局标志(g),每次调用exec()都会在字符串中继续查找新的匹配项
// var text = 'cat, bat, sat, fat';
// var pa = /.at/; // 匹配所有以'at'结尾的3个字符的组合
// var matches = pa.exec(text);
// console.log(matches.index);
// console.log(matches[0]); // cat
// console.log(pa.lastIndex); // 0
// matches = pa.exec(text);
// console.log(matches.index);
// console.log(matches[0]); // cat
// console.log(pa.lastIndex); // 0
// -------------------
// var pa2 = /.at/g;
// matches = pa2.exec(text);
// console.log(matches.index); // 0
// console.log(matches[0]); // cat
// console.log(pa2.lastIndex); // 3
// matches = pa2.exec(text);
// console.log(matches.index); // 5
// console.log(matches[0]); // bat
// console.log(pa2.lastIndex); // 8
// 在全局匹配模式下,lastIndex的值在每次调用exec()后都会增加,而在非全局模式下则始终不变
// test():常用来验证用户输入
// var text = '000-00-0000';
// var pattern = /\d{3}-\d{2}-\d{4}/g;
// if(pattern.test(text)){
// alert('this pattern was matched!');
// }
// console.log(pattern.toString());
// console.log(pattern.toLocaleString());
// console.log(pattern.valueOf());
// var pattern1 = new RegExp('\\d{3}-\\d{2}-\\d{4}','gi');
// console.log(pattern1.toString());
// console.log(pattern1.toLocaleString());
// console.log(pattern1.valueOf());
// 构造函数的属性
// var text = 'this is a short summer';
// var pattern = /(.)hort/g;
// if(pattern.test(text)){
// console.log(RegExp.input); // this is a short summer
// console.log(RegExp.lastMatch); // short
// console.log(RegExp.lastParen); // s
// console.log(RegExp.leftContext); // 'this is a '
// console.log(RegExp.rightContext); // ' summer'
// }
// var pattern2 = /(.)hor(.)/g;
// if(pattern2.test(text)){
// console.log(RegExp.$1);
// console.log(RegExp.$2);
// console.log(RegExp.$3);
// }
console.log(typeof (/[bc]at/i));
</script>
</head>
<body>
</body>
</html>