正则表达式是由一个字符序列形成的搜索模式,可用于所有文本搜索和文本替换的操作。
1.正则表达式的创建
第一种是字面量模式://中写内容
//var reg=/正则表达式/修饰符
var reg=/hello/g
第二种是构造函数:内部传入的参数为字符串
//var reg=new RegExp("正则表达式","修饰符")
var reg=new RegExp("hello","g")
2.字符分类
普通字符
字母、数字、下划线、汉字、没有特殊含义的符号(,;!@等)
特殊字符
\:将特殊字符转义成普通字符
模式修饰符
i:ignoreCase,匹配时忽视大小写
m:multiline,多行匹配
g:global,全局匹配
字面量创建正则时,模式修饰符写在一对反斜线后
3.正则表达式语法-元字符
字符集合
方括号用于查找某个范围内的字符。
例如[abc]指查找方括号里的任何一个字符,只要存在一个就为true,[0-9]查找0-9之间的任意数字
[^abc]是反义字符组,指不在括号里的任意字符,需要注意的是^写在[]里面时是指反义字符组。下面将会说到写在外面时的情况。
边界符
1.^ 匹配输入开始。表示匹配行首的文本(以谁开始)
2.$ 匹配输入结尾。表示匹配行尾的文本(以谁结束)
var reg = /^[^a-zA-Z0-9]$/;
console.log(reg.test('a'));//false
console.log(reg.test('B'));//false
console.log(reg.test(8));//false
console.log(reg.test('!'));//true
3.\b 匹配一个零宽单词边界,表示一个单词(而非字符)边界,也就是单词和空格之间的位置,或者字符(\w)与字符串开头或者结尾之间的位置。
4.\B 匹配一个零宽非单词边界(zero-width non-word boundary),与"\b"相反。
4.字符类
\d <=> [0-9]
\D <=> \d取反
\w <=> [a-zA-Z0-9_]
\W <=> [^a-zA-Z0-9_]
"." 除换行符\n和回车符之外的任何单个字符
5.数量词
6.
字符 | 含义 |
---|---|
* | >=0次 |
+ | ≥1 次 |
? | 0或1次 |
{n} | n 次 |
{n,} | ≥n 次 |
{n,m} | n到m 次 |
6.前瞻表达式
正则表达式里的前瞻,有的也管它叫零度断言。前瞻的作用:指定元素后面一定要匹配有什么,下面举例说明。
var str='hello,I am hejing'
var reg=/h(?=e)/g
var newStr=str.replace(reg,'B')
console.log(newStr)//Bello,I am Bejing
还有一个说法是负向前瞻,顾名思义刚好相反,后面不要匹配什么