正则用来定义一些字符串的规则,程序可以根据这些规则来判断一个字符串是否符合规则,也可以将一个字符串中符合规则的内容提取出来。
创建正则表达式:
var reg = new RegExp ("正则","匹配模式");
var reg = /正则表达式/匹配模式
语法
匹配模式: 设置匹配模式时,可以都不设置,也可以设置1个,也可以全设置,设置时没有顺序要求
- i:忽略大小写
- g:全局匹配模式
正则语法:
|
或[]
或[^ ]
除了[a-z]
小写字母[A-Z]
大写字母[A-z]
任意字母[0-9]
任意数字
示例1
var str="Hello World!";
var reg1=/[abc]/; //false 是否含a或b或c
var reg2=/a|d|e/; //true 是否含a或d或e
var reg3=/[^e]/; //true 是否含e以外的
var reg4=/[^Hello World!]/; //false 是否含Hello World!意外的
var reg5=/[0-9]/; //false 是否含0-9的数字
示例2
var str="hello world!";
var reg1=/[A-z]/; //true
var reg2=/[a-z]/; //true
var reg3=/[A-Z]/; //false
var reg4=/[A-Z]/i; //true
示例3
var str="abc adc aec";
var reg1=/a[gmn]c/; //false
// a[gmn]c 就相当于agc|amc|anc
var reg2=/a[bde]c/; //true
var reg3=/a[bfg]c/; //true
量词
-
n{X}
匹配包含 X 个 n 的序列的字符串。
例如- /a{2}/ 不匹配 “candy,” 中的 “a”
- /a{2}/ 匹配 “caandy,” 中的两个 “a”,且匹配 “caaandy.” 中的前两个 “a”。
- /ab{2}/ 匹配abb
- /(ab){2}/ 匹配abab
-
n{X,}
X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。
例如- /a{2,}/ 不匹配 “candy” 中的 “a”,
- /a{2,}/ 匹配 “caandy” 和 “caaaaaaandy.” 中所有的 “a”。
-
n{X,Y}
X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。
例如- /a{1,3}/ 不匹配 “cndy”
- /a{1,3}/ 匹配 “candy,” 中的 “a”,“caandy,” 中的两个 “a”
- /a{1,3}/ 匹配 “caaaaaaandy” 中的前面三个 “a”。注意,当匹配 “caaaaaaandy” 时,即使原始字符串拥有更多的 “a”,匹配项也是 “aaa”。
-
n+
匹配任何包含至少一个 n 的字符串。可以理解为n{1,}
例如- /a+/ 匹配 “candy” 中的 “a”,
- /a+/ 匹配 “caaaaaaandy” 中所有的 “a”。
-
n*
匹配任何包含零个或多个 n 的字符串。
例如- /bo*/ 匹配 “A ghost booooed” 中的 “boooo”,
- /bo*/ 匹配 “A bird warbled” 中的 “b”,
- /bo*/ 但是不匹配 “A goat grunted”。
-
n?
匹配任何包含零个或一个 n 的字符串。
例如
var str = "angel" ;
var reg = /x?/ ; //true
var reg = /a?/ ; //true
var reg = /(aa)?/ ; //true
n$
匹配任何结尾为 n 的字符串。^n
匹配任何开头为 n 的字符串。?=n
匹配任何其后紧接指定字符串 n 的字符串。
var str="Is this all there is";
var reg = /is(?= all)/; //true
var reg = /is(?= a)/ ; //true
var reg = /is(?= l)/ ; //false
var reg = /is(?= I)/ ; //false
?!n
匹配任何其后没有紧接指定字符串 n 的字符串。
元字符
元字符 | 描述 | 备注 |
---|---|---|
. |
查找单个字符,除了换行和行结束符 | 在正则表达式中使用\ 作为转义字 符 \. 表示. \\ 表示\ |
\w |
查找单词字符 | 相当于[A-z0-9_] 含有任意字母数字下划线 |
\W |
查找非单词字符 | 相当于[^A-z0-9_] 除了数字字母下划线 |
\d |
查找数字 | 相当于[0-9] |
\D |
查找非数字字符 | 相当于[^0-9] |
\s |
查找空白字符 | 含有空格 |
\S |
查找非空白字符 | 不含空格 |
\b |
匹配单词边界 | |
\B |
匹配非单词边界 | |
\0 |
查找 NULL 字符 | |
\n |
查找换行符 | |
\f |
查找换页符 | |
\r |
查找回车符 | |
\t |
查找制表符 | |
\v |
查找垂直制表符 | |
\xxx |
查找以八进制数 xxx 规定的字符 | |
\xdd |
查找以十六进制数 dd 规定的字符 | |
\uxxxx |
查找以十六进制数 xxxx 规定的 Unicode 字符 |
示例1:去除不同位置的空格
var str = " hello world " ;
console.log(str.replace(/\s/g,"")); //输出“helloworld”
console.log(str.replace(/^\s*/g,"")); //输出“hello world ”
console.log(str.replace(/\s*$/g,"")); //输出“ hello world”
console.log(str.replace(/^\s*|\s*$/g,"")); //输出“hello world”
示例2:电子邮件匹配
// 邮件格式 任意字母数字下划线.任意字母数字下划线 @ 任意字母数字 .任意字母(2-5位)
var reg=/^\w{3,}@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
var email = "[email protected]" ; //true
var email = "[email protected]" ; //true
var email = "[email protected]" ; //true
var email = "[email protected]" ; //true
var email = "abc0asfabc.com.cn" ; //false
var result=reg.test(email);
console.log(result);
解析:
邮件格式:任意字母数字下划线(至少3位) @ 任意字母数字 .任意字母(2-5位) .任意字母(2-5位)
正则表达式:^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$
- 开头任意字母数字下划线 →
^\w{3,}
- @ →
@
- 任意字母数字→
[A-z0-9]
- 以.任意字母结尾,并且含有1-2个
(\.[A-z]{2,5}){1,2}$
例如:qq.com
edu.com.cn
后面可能有1-2个.xxx
方法
- test 检索字符串中指定的值。返回 true 或 false。
- exec 检索字符串中指定的值。返回找到的值,并确定其位置。
compile 在 1.5 版本中已废弃。 编译正则表达式。
与string方法联动
- search() 可以根据正则表达式或者子字符串去原字符串中查找指定的内容
参数:正则表达式或者字符串,将会根据该表达式查询内容,并且返回第一次匹配到的内容的索引,如果没有匹配到则返回-1。
var str="Hello World! Hi Sian! Hello CSDN";
var result=str.search("!"); //11
var result=str.search("。"); //-1
var result=str.search(/h/); //-1 没有小写h
var result=str.search(/h/i); //0 i 忽略大小写
var result=str.search(/h/ig); //0 i 忽略大小写
- split() 可以根据指定内容将一个字符串或正则表达式拆分为一个数组
- 参数: 一个字符串,作为参数,将会根据字符串去拆分数组,可以接收一个正则表达式,此时会根据正则表达式去拆分数组
var str="Hi Sian! Hello csdn";
var result=str.split("s"); //按小写s划分
//输出 (2) ["Hi Sian! Hello c", "dn"]
var result=str.split(""); //空字符串划分
//输出 (19) ["H", "i", " ", "S", "i", "a", "n", "!", " ", "H", "e", "l", "l", "o", " ", "c", "s", "d", "n"]
var result=str.split(/s/i); //按s划分,不区分大小写
//输出 (3) ["Hi ", "ian! Hello c", "dn"]
- match() 可以将字符串中和正则表达式匹配的内容提取出来
参数: 正则表达式,可以根据该正则表达式将字符串中符合要求的内容提取出来,并且封装到一个数组中返回,如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。
结果- 如果没有找到任何匹配的子串,则返回 -1(有的浏览器可能会输出null)。
- 如果找到结果
- 正则表达式全局匹配,则返回相应的数组
- 正则表达式不是全局匹配,则返回首次出现的索引
var str = "The rain in SPAIN stays mainly in the plain";
var result = str.match(/ain/); //未开全局索引
// 输出 5
var result = str.match(/ain/g); //全局索引
// 输出 (3) ["ain", "ain", "ain"]
var result = str.match(/[0-9]/g);
// 输出 null
- replace() 可以将字符串中指定内容替换为新的内容
参数- 第一个:被替换的内容,可以是一个正则表达式,也可以是字符串,如果是字符串,则只会替换从开头检索到的第一个内容。
- 第二个:替换的新内容,字符串
var str = "The rain in SPAIN stays mainly in the plain";
var result = str.replace("ain","喵");
// The r喵 in SPAIN stays mainly in the plain
var result = str.replace(/ain/,"喵");
// The r喵 in SPAIN stays mainly in the plain
var result = str.replace(/ain/g,"喵"); //全局匹配
// The r喵 in SPAIN stays m喵ly in the pl喵
var result = str.replace(/ain/ig,"喵"); //全局忽略大小写
// The r喵 in SP喵 stays m喵ly in the pl喵