什么是正则表达式
正则表达式是由一个字符序列形成的搜索模式,当你在文本中检索某种规则的字符串时,你可以用这个搜索模式来描述你要查询的内容
正则表达式语法如下:
var regexp = /pattern/modifiers
或
var regexp = new RegExp(pattern, modifiers)//如果正则表达式主体为变量,只能用此方法
pattern 是正则表达式主体,用来描述检索模式
modifiers 是修饰符,用来修饰检索方式
例如:
var regexp = /hello/i
或
var str = 'hello';
var regexp = new RegExp(str, 'i');//当正则表达式主体是变量时,只能用该方式定义正则表达式
解析:
/hello/i 就是一个正则表达式,regexp是正则表达式对象其中hello是正则表达式主体,表示包含'hello'字符串,而i是修饰符,表示检索时不区分大小写。/hello/i 是一个不区分大小写并包含'hello'字符串的规则模板
正则表达式的写法
普通字符
| 普通字符 | 描述 |
|---|---|
| [xyz] | 匹配 [...] 中的所有字符,例如 [hw] 匹配字符串 "hello world" 中所有的 'h' 'w' 字母 |
| [^xyz] | 匹配除 [...] 中字符的所有字符,例如 [^hw] 匹配字符串 "hello world" 中除 'h' 'w' 的所有字母。 |
| [x-y] | [x-y] 表示一个区间,匹配所有大写字母,例如 [a-z] 表示小写字母,[0-9] 表示数字 |
| \w | 匹配字母、数字、下划线,等价于 [A-Za-z0-9_] |
特殊字符
| 特殊字符 | 描述 |
|---|---|
| \ | 将下一个字符标记为特殊字符或原义字符或向后引用或八进制转义符 |
| 执行对大小写不敏感的匹配 | |
| $ | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) |
| + | 匹配前面的子表达式一次或多次 |
| . | 匹配除换行符 \n 之外的任何单字符 |
| | | 指明两项之间的一个选择 |
(数量)限定符
| 限定符 | 作用 |
|---|---|
| {n} | n 是一个非负整数,表示匹配确定的 n 次。例如,/o{2}/ 不能匹配 'Bob' 中的 'o',但是能匹配 'cool' 中的两个 o |
| {n,} | n 是一个非负整数,表示至少匹配 n 次。例如,/o{2,}/ 不能匹配 "Bob" 中的 'o',但能匹配 "coooool" 中的所有 o |
| {n,m} | m 和 n 均为非负整数,其中n <= m,表示最少匹配 n 次且最多匹配 m 次 |
| * | 匹配前面的子表达式零次或多次,等价于 {0,} |
| + | 匹配前面的子表达式一次或多次,等价于 {1,} |
| ? | 匹配前面的子表达式零次或一次,等价于 {0,1} |
修饰符
| 修饰符 | 作用 |
|---|---|
| i | 执行对大小写不敏感的匹配 |
| g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) |
| m | 执行多行匹配 |
使用正则表达式
正则对象的方法有:test()、exec()
字符串的正则方法有:match()、replace()、search()、split()
test() 方法
test()用于在字符串中查找符合某正则的内容,若查找到返回true,反之返回false
var regexp = /hello/
console.log(regexp.test("hello world"))//控制台输出:true
search() 方法
search()可检索字符串与正则表达式/字符串相匹配的子字符串,并返回子串的起始位置,若没匹配到,则返回 -1
var str = "hello world";
console.log(str.search(/world/));//控制台输出:6
replace() 方法
replace()用于将检测到的匹配到某个模式的第一个子字符串替换为指定字符串
var str = "Dame you";
console.log(str.replace(/dame/i, 'love'))//控制台输出:love you