正则表达式经常用到,这篇文件做一下总结记录
一、字符
字符:元字符和字面量字符
元字符
是表示特殊含义的字符,包括:^ $ . [ ] { } - ? * + ( ) | \\
字符。
字面量字符
: 其他字符在表达式中都表示其原来的含义,为字面量字符。
1 位置字符
^
:匹配字符串开始位置。
$
:匹配字符串结束位置。
2 点字符
.
:匹配除回车(\r)、换行(\n) 、行分隔符(\u2028)和段分隔符(\u2029)以外的所有字符。
3 选择符
|
: 表示‘或’关系,即/apple|banana/
表示匹配apple或banana
4 转义符
\
: 那些有特殊含义的元字符,如果要匹配它们本身,就需要在它们前面要加上反斜杠。
5 特殊字符
一些不能打印的特殊字符
\n 匹配换行键。
\r 匹配回车键。
\t 匹配制表符 tab(U+0009)。
\v 匹配垂直制表符(U+000B)。
\f 匹配换页符(U+000C)。
6 字符类
[]
:有一系列字符可供选择,只要匹配其中一个就可以了
6.1 脱字符(^)
脱字符只有在字符类的第一个位置才有特殊含义,否则就是字面含义。
[^abc]表示匹配不是a、b、c字符的其他字符
[^a-z]表示匹配不是a、b、c....到z字符的其他字符
6.2 连字符(-)
对于连续序列的字符,连字符(-)用来提供简写形式,表示字符的连续范围,[0-9],[a-z],[A-Z]
7 预定义模式
某些常见模式的简写方式
\d 匹配0-9之间的任一数字,相当于[0-9]。
\D 匹配所有0-9以外的字符,相当于[^0-9]。
\w 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]。
\W 除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_]。
\s 匹配空格(包括换行符、制表符、空格符等),相等于[ \t\r\n\v\f]。
\S 匹配非空格的字符,相当于[^ \t\r\n\v\f]。
\b 匹配词的边界。
\B 匹配非词边界,即在词的内部。
8 重复类{}
精确匹配次数
{n}表示恰好重复n次,{n,}表示至少重复n次,{n,m}表示重复不少于n次,不多于m次。
9 量词符
?
:出现0次或1次,等同于{0, 1}
*
:出现0次或多次,等同于{0,}。
+
:出现1次或多次,等同于{1,}。
10 修饰符
i
:忽略大小写
g
:全局匹配
let str = "banana"
// 单个修饰符
/Banana/.test(str) // false
/Banana/i.test(str) // true
str.replace(/a/,'x') // 'bxnana'
str.replace(/a/g,'x') // 'bxnxnx'
// 多个修饰符
str.replace(/A/ig,'x') // 'bxnxnx'
str.replace(/A/g,'x') // 'banana'
11 贪婪匹配
三个量词符(?*+),默认情况下都是最大可能匹配,即匹配直到下一个字符不满足匹配规则为止
*?
:出现0次或多次,匹配时采用非贪婪模式
+?
:出现1次或多次,匹配时采用非贪婪模式
二、实例方法
1 RegExp正则对象方法
RegExp.prototype.test() 执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。
RegExp.prototype.exec() 执行一个搜索匹配。返回一个结果数组或 null。
let str = 'banana'
let regExp = /^b[a-z]?/
regExp.test(str) // true
let regExp = /an/g
let regExp2 = /(b)a(n)([a-z])/g
regExp.exec(str) // [an]
regExp2.exec(str) // ["bana", "b", "n", "a"]
2 String字符串方法
String.prototype.match() // 检索返回一个字符串匹配正则表达式的结果
String.prototype.search() // 返回正则表达式在字符串中首次匹配项的索引;否则,返回 -1
String.prototype.replace() // 返回替代模式所取代的新的字符串
String.prototype.split() // 返回源字符串以分隔符出现位置分隔而成的一个 Array
网友评论