正则表达式
1.正则对应的构造函数:RegExp;
2.创建正则表达式:
直接量:/ /;
New关键字:new RegExp(“正则”,“修饰符[11] ”);
3.汉字:/[\u4e00-\u9fa5]/g
4.正则中引入变量的方式;
Eg: var char = “c”;
var exp = new RegExp(char,“g”); è /c/g
或 var exp = eval(`/${char}/g`);
5.验证电话:
var phone = “18636002092”
var exp = /^1[3-9]{1}[0-9]{9}$/
^表示以1开头
[3-9]{1}表示第二位数字是3-9,并且匹配1个;
[0-9]{9}表示从第三位开始匹配,匹配九次;
6.正则一般是贪婪模式,加?后就是费贪婪模式。
详见13
Eg:
贪婪模式匹配
var str = “jbwrbgagruimone”;
str.match(/[a-z]{6}/g); [“jbwrbg”,“agruim”]
str.match(/[a-z]{2,6}/g); [“jbwrbg”,“agruim”,“one”]
非贪婪模式匹配(使用?)
str.match(/[a-z]{2,6}?/g); [“jb”,“wr”,“bg”,“ag”,“ru”,“im”,“on”]
7.\s 空格; \S除去空格之外的所有字符
8.整个正则是个大分组,大分组在拆分成若干个小分组用“()”
Eg: var str = “jguwr123hewo456fhwo”;
var exp = /([a-z]+)([0-9]+)/g
console.log(str.match(exp)) ["jguwr123", "hewo456"]
9.?!或?=
var str = “This is a isbox!”
var exp = /is(?!\s)/g ;
console.log(str.match(exp)) 表示后面没有空格的is=> [“is”]
var exp = /is(?=\s)/g ;
console.log(str.match(exp)) 表示后面有空格的is=>[“is”,“is”]
10.“|”:表示选择;
Eg: var str = “ f g s ”;
忽略左右空格:str.replace(/^[\s]+|[\s]+$/g,“”) “f g s”
不写$会忽略全部
11.“?”表示匹配0或1次
12.“\”表示转义符
Eg:\r\n 表示换行符(回车)
“\w”===“[0-9A-z_]” 匹配0-9,A-z,下划线
“.”===“[^\r\n]” 匹配除换行符以外的任意字符
“\b” 匹配单词的开始或结束
“^” 匹配字符串的开始
“$” 匹配字符串的结束
“\d” 匹配数字
“[^x]” 匹配除了x以外的任意字符
“[^aeiou]” 匹配除了aeiou以外的任意字符
13.
“*” 重复0次或多次
“*?” 表示重复任意次,但尽可能少重复
“+” 重复1次或多次
“+?” 重复1次或多次,但尽可能少重复
“?” 重复0次或1次
“??” 重复0次或1次, 但尽可能少重复
{n} 重复n次
{n,} 重复n次或多次
{n,}? 重复n次或多次, 但尽可能少重复
{n,m} 重复n次到m次
{n,m}? 重复n次到m次,但尽可能少重复
14.“[]” 表示取其中的一个,只占一个字符
Eg:[abc]表示匹配a或b或c
15.exec: 会返回正则匹配到的数据(数组的形式)
index:表示匹配字符开始的数据;
input: 表匹配的字符串;
length:表示每一次根据正面的规则匹配到的数据,子表达式越多,length值越大,没有子表达式,length值为1;
eg: var reg = /(hello)\s(world)\s\1\s\2/
“1”:表示匹配到第一个子表达式(hello) “2”:表示匹配到第二个子表达式(world)
var str = “hello world hello world”;
reg.text(str); => true
16.split: 可以以正则来分割字符串;
search:匹配正则规则里在字符串中出现的位置;
match:方法当不加g时会返回正则匹配的内容和分组的内容,还包括匹配 内容开始的索引(index),还有input属性;加g后,返回的是所有能和正则匹配的内容。
Eg:var str = “sf32sk33sd49”;
var arr = [];
var newStr = str.replace(/\d+/g, function(a){
arr.push(a)
}) arr = [“32”,“33”,“49”]
Replace后面函数中第一个参数表示匹配到的字符串,如果有子表达式,则有几个就会有几个参数体现,接着才是下标,整个字符串;如果没有子表达式,第二个参数是匹配到的起始下标,第三个参数是整个字符串。
match后面的函数中不是全局匹配同没有子表达式一致。
[11]g: global(全局)
i: ignore(忽略大小写)
m: multiple(多行匹配)