正则表达式温习
正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。
正则创建方式有
var re = new RegExp("\s+");
在使用构造函数创建正则对象时,需要加转义字符(反斜杠\)或者以下列方式创建
var re = /\s+/;
修饰符
i 执行对大小不敏感的匹配
g 执行全局匹配(查找完所有匹配字符)
m 执行多行匹配
方括号
[123] 查找方括号里的任何字符
[^abc] 查找任何不在方括号里的字符
[0-9] 查找从0到9之间包括0,9的数字
[a-z] 查找从小写a到小写z之间的字符包括a,z
[A-Z] 查找从大写A到大写Z之间的字符包括A,Z
[adfrt] 查找给定集合内的所有字符
[^adfrt] 查找给定集合外的所有字符
(x|y) 查找任何指定的选项
元字符
元字符使用有特殊含义的字符
. 查找单个字符,除了换行和行结束符
例:var str = "abcd"
console.log(str.macth(/.+/)) // ["abcd", index: 0, input: "abcd"]; +表示匹配不止一个
\w 查找单词字符
例: var str = "abcd123我的你的"
console.log(str.match(/\w+/)) //["abcd123", index: 0, input: "abcd123我的你的"]
\W 查找非单词字符
例:var str = "abcd123我的你的"
console.log(str.match(/\W+/)) //["我的你的", index: 7, input: "abcd123我的你的"]
\d 查找数字
例:var str = "abcd123我的你的"
console.log(str.match(/\d+/)) //["123", index: 4, input: "abcd123我的你的"]
\D 查找非数字字符
例:var str = "A;{1r!abcd123我的你的"
console.log(str.match(/\D+/)) //["A;{", index: 0, input: "A;{1r!abcd123我的你的"]
如果要全部查找出来需要加上g修饰符
console.log(str.match(/\D+/g)) //["A;{", "r!abcd", "我的你的"]
\s 查找空白字符
例: var str="12 34 567 "
console.log(str.match(/\s+/)) //[" ", index: 2, input: "12 34 567 "]
\S 查找非空白字符
例: var str="12 34 567 "
console.log(str.match(/\S+/)) //["12", index: 0, input: "12 34 567 "]
\b 匹配单词边界 (单词:都是指由\w即[a-zA-Z0-9_]组成的字符串,单词边界:那就是每个字符之间以及字符串首尾)
例: var str="aaa 12 34567"
console.log(str.replace(/\b/g,"……")) //……aaa…… ……12…… ……34567……
省略号(……)出现的位置即我们说的单词边界
\B 匹配非单词边界
例: var str="aaa 12 34567"
console.log(str.replace(/\B/g,"……")) //a……a……a 1……2 3……4……5……6……7
省略号(……)出现的位置即我们说的非单词边界
\0 查找NULL字符 (NUL字符通常以转义序列'\0'表示。声明正则表达式是/\0/的时候,'\0'会匹配成功。)
例: var reg=/\0/;
reg.test('\0'); //true
reg.test(''); //false
reg.test(' '); //false
并且 空白符和空字符是不一样的空字符为\0,空白符为[ \t\n\x0B\f\r] , \0代表查找NULL字符
\n 查找换行符
例:var str = `123
4567`;
console.log(str.match(/\n/)) // ["↵", index: 3, input: "123↵4567"]
\f 查找换页符。
\r 查找回车符。
\t 查找制表符。
\v 查找垂直制表符。
\xxx 查找以八进制数 xxx 规定的字符。
\xdd 查找以十六进制数 dd 规定的字符。
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。
量词
n+ 匹配任何包含至少一个n的字符串
例如:/a+/ 匹配"candy"z中的"a","caaaaaaaaandy"中的所有"a";
n* 匹配任何包含零个或多个n的字符串
例如:/bo*/匹配"A ghost boooed" 中的"booo","A bird warbled"中的"b",但是不匹配"A goat grunted"
n? 匹配任何包含零个或者一个n的字符串
例如:/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。
n{X} 匹配包含 X 个 n 的序列的字符串
例如:/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的两个 "a",且匹配 "caaandy." 中的前两个 "a"。
n{X,} X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配
例如:/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。
n{X,Y} X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。
例如:/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的两个 "a",匹配 "caaaaaaandy" 中的前面三个 "a"。注意,当匹配 "caaaaaaandy" 时,即使原始字符串拥有更多的 "a",匹配项也是 "aaa"。
n$ 匹配任何结尾为 n 的字符串。
例如:
var str = "angeelnel";
console.log(str.match(/el$/)) //["el"]
^n 匹配任何开头为 n 的字符串。
例如:
var str = "angeelnel";
console.log(str.match(/^an/)) //["an", index: 0, input: "angeelnel"]
?=n 匹配任何其后紧接指定字符串 n 的字符串。
例如:
var str="ange elnel";
console.log(str.match(/ge(?=el)/)) //["ge"] 如果不是就会返回null
?! = n 匹配任何其后没有紧接指定字符串 n 的字符串。
var str="Is this all there is";
var patt1=/is(?! all)/gi;