1. 正则表达式对象的创建
1.1 构造函数
修饰函数只能是g i m,可以省略
var pattern = new RegExp("正则表达式内容","修饰符");
var pattern = new RegExp("abc","img");
1.2 字面量
var pattern = /正则表达式/修饰符;
var pattern = /adc/img
2. 修饰符
-
i:ignore case 忽略大小写
abc acnnACxqcqxabc
-
m:multiline 多行匹配 (\n)
如果没有\n,m修饰符将毫无意义。
-
g:global 全词匹配
如果加了这修饰符,在匹配时会维护一个lastIndex的属性,用来记录当前匹配到这个字符串时的结束的位置,下一次匹配从lastIndex开始。
如果没有g,lastIndex一直为0。
/abc/g aBCAbcabc
true lastIndex
下一次匹配的时候 会从lastIndex开始
3. 原型方法
3.1 exec()
参数:字符串
返回值:类数组对象
【数组,index,input...】
从参数中获取目标字符串
1.
var pattern = /abc/g;
var str = "abc";
var result = pattern.exec(str);
console.log(result);
插件:
nodemon
npm i nodemon -g : 检测 js文件的变化,并自动运行 js*
var pattern = /abc/g;
var str = "ababc ac ab abcd we"
console.log(pattern.exec(str));
console.log("lastIndex:" + pattern.lastIndex);//5
console.log(pattern.exec(str));
console.log("lastIndex:" + pattern.lastIndex);//15
console.log(pattern.exec(str));//null
console.log("lastIndex:" + pattern.lastIndex);//0
2.
/abc/: 只匹配abc或者其他大小写状态
/abc(d|e): 匹配abcd或abce
var pattern = /abc(d|e)/g;
var str = "abcc abcd ab abce";
console.log(pattern.exec(str));
console.log(pattern.lastIndex);//abcd 5 9
console.log(pattern.exec(str));
console.log(pattern.lastIndex);//abcd 13 17
console.log(pattern.exec(str));
console.log(pattern.lastIndex);//0
var pattern = /abc(d|e)/g;
var str = "abcc abcd ab abce";
while (pattern.exec(str) === null) {
console.log(XPathResult[0]);
}//abcd abce
3.2 test()
test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
参数:str
返回值:Boolean true false
var pattern = /abc/i;
var string = "hello 123 abc";
console.log(pattern.test(str));//true
3.3 toString()
参数:无
返回值:string
//var pattern= /abc/i;
var pattern = new RegExp("abc","i");
console.log(pattern.toString());//转为字符串
4. 原型属性
-
global
-
ignoreCase
-
multiline
-
source
-
flags
-
lastIndex
var pattern = /abc/img;
console.log(pattern.global);
console.log(pattern.ignoreCase);
console.log(pattern.multiline);
console.log(pattern.source);
console.log(pattern.flags);
5 . String 对正则表达式的支持
5.1 match()
调用者:string
参数:正则表达式
返回值:数组(匹配成功结果组成的数组,要注意正则表达式的全局修饰符)
5.2 search()
调用者:string
参数:正则表达式,若不是,会先使用RegExp将其转为构造函数
不支持全局检索(g)
如果匹配成功,返回第一个成功的值
不成功 -1
var pattern = /...\./g;
var str = "abc.d abcd aacbc abc.c";
console.log(str.search(pattern));//0
//不成功
var pattern = /.........\./g;
var str = "abc.d abcd aacbc abc.c";
console.log(str.search(pattern));//0
5.3 replace()
调用者:string
参数:正则表达式,要替换的字符串
返回值:替换后的文本,不改变原字符串(string)
//替换文本内容
var text ="Javascript";
text.replace(/javascript/gi,"Javascript");
console.log(text);
console.log(text.replace(/javascript/gi,"Javascript"));
6 . 正则表达式的规则---在js中的运用
6.1 字符类(重点)
-
. 用来匹配任意单个字符, 行结束符除外
-
\d 匹配任意的一个阿拉伯数字 等价于【0-9】
-
\D 匹配任意的一个不是阿拉伯数字的字符 等价于【^0-9】
-
\w 匹配任意字母,数字,下划线 等价于【A-Z a-z 0-9 _】
-
\W 匹配任意不是字母,数字,不是下划线 等价于【^A-Z a-z 0-9 _】
-
\s 匹配空白符---空格,tab(制表符) 换行符 换页符和其他Unicode (\u00A0等)
-
\S 匹配非空白符
-
\t 匹配一个水平制表符(tab)
-
\n 匹配一个换行符(linefeed)
-
\r 匹配一个回车符(carriage return)
-
\v 匹配一个垂直制表符(vertical tab)
-
\f 匹配一个换页符(form-feed)
var pattern = /abc/g;
var str = "abcd abc";
console.log(str.match(pattern));//abcd abcd
var pattern = /abc./g;
var str = "abcd abc";
console.log(str.match(pattern));//abc abcc
//匹配abc.
var pattern = /abc./g;
var str = "abc.d abcd aacbc abc.c";
console.log(str.match(pattern));//abc. abc.
//匹配 三个字符开头 ,结束
var pattern = /...\./g;
var str = "abc.d abcd aacbc abc.c";
console.log(str.match(pattern));
6.2 字符集合
-
【0-9】
-
【A-Z】
-
【^A-Z】
-
【012】
6.3 分组
(|)
6.4 正则表达式案例----验证
案例:日期验证
//日期格式 2021-09-01
var pattern = /^ (\d{4})-(\d{2})-(\d{2})$/g;
var str = "2021-09-01"
console.log(pattern.test(str));
//进一步
var pattern = /^ [1-9]\d{3}-(\d{2})-(\d{2})$/g;
var str = "2021-09-01"
console.log(pattern.test(str));
//再进一步
var pattern = /^ [1-9]\d{3}-(0[1-9]|1[0-2])-(0[0-9]|[1-2][0-9]|3[0-1])$/g;
var str = "2021-09-01"
console.log(pattern.test(str));
手机号码验证
// 判断是否为手机号 var myreg=/^[1][3,4,5,7,8][0-9]{9}$/;
//这个表达式的意思是:
//1--以1为开头;
//2--第二位可为3,4,5,7,8,中的任意一位;
//3--最后以0-9的9个整数结尾。
isPoneAvailable: function (pone) {
var myreg = /^[1][3,4,5,7,8][0-9]{9}$/;
if (!myreg.test(pone)) {
return false;
} else {
return true;
}
}