经过RegExp类型来支持正则表达式。html
let expression = /pattern / flags
其中的模式(pattern)部分能够是任何简单或复杂的正则表达式,能够包含字符类、限定符、分组、向前查找以及反向引用。git
每个正则表达式均可带有一或多个标志(flags),用以代表正则表达式的行为。web
正则表达式的匹配模式支持下列3个标志:正则表达式
正则表达式 = 1个模式+ 3个标志 (任意),不一样的组合产生不一样结果express
注意:默认状况下,一个字符串不管是否换行,只要只有一个开始标志和一个结束标志$,若是采用多行匹配,那么每一行都有一个和&做为开始和结束。数组
基本使用:svg
//匹配字符串全部“fur”的实例 pattern1 = /fur/g ; //匹配第一个字符串“fur”,不区分大小写 pattern2 = /fur/i ; //匹配全部“fur”实例且不区分大小写。 pattern3 = /fur/gi ; console.log(pattern1.test("catfur"))//true console.log(pattern2.test("catFur"))//true console.log(pattern3.test("catFur"))//true
注意:模式中使用的全部元字符都必须转义,包括:( { \ ^ $ | ) * + . ] }
,由于这些元字符的正则表达式中都有特殊用途。函数
例如:grunt
//匹配第一个fur或cur,不区分大小写 let p1 = /[fc]ur/i; //匹配第一个"[fc]ur",不区大小写,转义有特殊用途的[] let p2 = /\[fc\]ur/i ; console.log(p1.test("catFur"))//true console.log(p2.test("cat[Fc]Ur"))//true
除了用字面量定义正则表达式,还能够经过RegExp构造函数,接收两个参数:一个是匹配的字符串,一个是可选的标志字符串。spa
例如:
let p1 = new RegExp("[fc]ur","i") console.log(p1.test("catFur"))//true
注意:因为构造函数的模式参数都是字符串,因此全部元字符都必须进行双重转义即\\
,转义过的字符也是如此。
let p1 = new RegExp("\\[fc\\]ur","i") console.log(p1.test("cat[Fc]ur"))//true
global:布尔值,表示是否设置了g标志
ignoreCase:布尔值,表示是否设置了i标志
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起。
multiline:布尔值,表示是否设置了m标志
source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。
例如:
let p = /\[fc\]ur/i; console.log(p.ignoreCase)//true console.log(p.lastIndex)//0 console.log(p.source)//\[fc\]ur
exec()
该方法专门为捕获组设计。接受一个参数,即要应用模式的字符串,而后返回包含第一个匹配项信息的数组,或者没有匹配项时返回null。
返回的数组虽然是Array的实例,可是包含index和input两个额外属性,index表示匹配项字符串的位置,input表示应用正则表达式的字符串。
在数组中,第一项是与整个模式匹配的字符串,其余项是与模式中的捕获组匹配的字符串。(若是没有捕获组,则只有第一项)
例如:
let text = "fur like study and play" let p = /fur( like study( and play)?)?/gi; let matches = p.exec(text) console.log(matches.index)//0 console.log(matches.input)//fur like study and play console.log(matches[0])//fur like study and play console.log(matches[1])// like study and play console.log(matches[2])// and play
对于exec()
方法,即便设置了全局标志,每次页只会返回第一个匹配项,不过会继续找新的匹配项;可是若是不设置全局标志,则会在同一个字符串上屡次调用exec()
将始终返回同一个结果。
let text = "fur is fur" let p1 = /fur/g; let matches1 = p1.exec(text) console.log(matches1.index)//0 console.log(matches1[0])//fur console.log(p1.lastIndex)//3 matches1 = p1.exec(text) console.log(matches1.index)//9 console.log(matches1[0])//fur console.log(p1.lastIndex)//12 let p2 = /fur/; let matches2 = p2.exec(text) console.log(matches2.index)//0 console.log(matches2[0])//fur console.log(p2.lastIndex)//0 matches2 = p2.exec(text) console.log(matches2.index)//0 console.log(matches1[0])//fur console.log(p2.lastIndex)//0
test()
接受一个字符串参数,在模式与该参数匹配状况下返回true,不然返回false。经常使用于验证输入是否有效。
let text = "000-00-0000" let p = /\d{3}-\d{2}-\d{4}/; console.log(p.test(text))//true
RegExp实例继承的toString()
,toLocaleString()
返回的是字符串,valueOf()
返回的是正则表达式自己
let p = new RegExp("\\[fc\\]ur","i") console.log(p.source)// [fc\]ur console.log(p.toString())// \[fc\]ur/i console.log(typeof(p.toLocaleString()))// \[fc\]ur/i console.log((p.valueOf()) instanceof RegExp)//true
这些属性适用于做用域中的全部正则表达式,而且基于所执行的最近一次正则表达式操做而变化。并且能够经过两种方式访问他们。
长属性名 | 短属性名 | 说明 |
---|---|---|
input | $_ | 最近一次要匹配的字符串 |
leftContext | $` | input字符串中lastMatch以前的文本 |
rightContext | $’ | Input字符串中lastMatch以后的文本 |
lastMatch | $& | 最近一次匹配的项 |
lastParen | $+ | 最近一次匹配的捕获组 |
multiline | $* | 布尔值,表示是否全部表达式都使用多行模式 |
let text = "fur like play" let p = /(.)ike/g; if(p.test(text)){ console.log(RegExp.$_)//fur like play console.log(RegExp["$`"])//fur console.log(RegExp["$'"])// study console.log(RegExp["$&"])//like console.log(RegExp["$+"])//l console.log(RegExp["$*"])//undefined }
multiline输出结果与书本不合,以运行结果为准
还有多达9个用来存储捕获组的构造函数属性,RegExp["$1"]…RegExp["$9"]
let text = "fur like play" let p = /(..)k(...)/g; if(p.test(text)){ console.log(RegExp["$1"])//li console.log(RegExp["$2"])//e p }
表达式 | 描述 |
---|---|
[abc] | 查找方括号之间的任何字符。 |
[^abc] | 查找任何不在方括号之间的字符。 |
[0-9] | 查找任何从 0 至 9 的数字。 |
[a-z] | 查找任何从小写 a 到小写 z 的字符。 |
[A-Z] | 查找任何从大写 A 到大写 Z 的字符。 |
[A-z] | 查找任何从大写 A 到小写 z 的字符。 |
[adgk] | 查找给定集合内的任何字符。 |
[^adgk] | 查找给定集合外的任何字符。 |
(red|blue|green) | 查找任何指定的选项。 |
元字符 | 描述 |
---|---|
. | 查找单个字符,除了换行和行结束符。 |
\w | 查找单词字符。 |
\W | 查找非单词字符。 |
\d | 查找数字。 |
\D | 查找非数字字符。 |
\s | 查找空白字符。 |
\S | 查找非空白字符。 |
\b | 匹配单词边界。 |
\B | 匹配非单词边界。 |
\0 | 查找 NULL 字符。 |
\n | 查找换行符。 |
\f | 查找换页符。 |
\r | 查找回车符。 |
\t | 查找制表符。 |
\v | 查找垂直制表符。 |
\xxx | 查找以八进制数 xxx 规定的字符。 |
\xdd | 查找以十六进制数 dd 规定的字符。 |
\uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 |
量词 | 描述 |
---|---|
n+ | 匹配任何包含至少一个 n 的字符串。 例如,/a+/ 匹配 “candy” 中的 “a”,“caaaaaaandy” 中全部的 “a”。 |
n* | 匹配任何包含零个或多个 n 的字符串。例如,/bo*/ 匹配 “A ghost booooed” 中的 “boooo”,“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 的字符串。 |
^n | 匹配任何开头为 n 的字符串。 |
?=n | 匹配任何其后紧接指定字符串 n 的字符串。 |
?!n | 匹配任何其后没有紧接指定字符串 n 的字符串。 |
方法 | 描述 | FF | IE |
---|---|---|---|
search | 检索与正则表达式相匹配的值。 | 1 | 4 |
match | 找到一个或多个正则表达式的匹配。 | 1 | 4 |
replace | 替换与正则表达式匹配的子串。 | 1 | 4 |
split | 把字符串分割为字符串数组。 | 1 | 4 |
有用的话点个赞丫谢谢