正则表达式
- 在JavaScript中,正则表达式也是对象,是一种索引类型。
- 使用一个正则表达式字面量是最简单的方式,两个
/是正则表达式的定界符。 - 语法:var reg = /abc/; 正则表达式字面量在脚本加载后编译。如果正则表达式是常量,则可以获得更好的性能。
- 使用
RegExp对象的构造函数:var re = new RegExp("abc")
相关正则方法
-
字符串的方法:
- split() 根据匹配字符串切割父字符串,返回一个
数组。 - match() 使用正则表达式与字符串相比较,返回一个包含匹配结果的
数组。 - search() 对正则表达式或指定字符串进行搜索,返回第一个出现的匹配项的下标。如果匹配不成功,返回 -1。
- replace() 用正则表达式和字符串直接比较,然后用新的子串来替换被匹配的子串。
- split() 根据匹配字符串切割父字符串,返回一个
-
正则表达式方法:
- exec() 在目标字符串中执行一次正则匹配操作。不论有没有全局修饰符,都只会在找到第一个之后停止。如果匹配不到返回一个null。可以通过打点调用返回结果中的
index属性,查看返回结果的开始下标。 - 语法:
正则表达式.exec(str)
- exec() 在目标字符串中执行一次正则匹配操作。不论有没有全局修饰符,都只会在找到第一个之后停止。如果匹配不到返回一个null。可以通过打点调用返回结果中的
let str = "aaabcccc";
let strArr = /abc/.exec(str);
* test() 检测字符串是否匹配正则表达式。返回一个布尔值。
* 语法:`正则表达式.test(str)`
let str = "a bc";
let regResult = /\s/.exec(str);
正则表达式的组成
- 由一些普通字符和一些特殊字符(又叫元字符)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的意义。
- 特殊字符:JavaScript中常用特殊字符有 () [] {} \ ^ $ | ? * + .
- 如果想匹配这类字符IXUS用转义符号 \ 。
- 预定义特殊字符:
- \t /\t/ 制表符
- \s /\s/ 空格
- \n /\n/ 回车符
- \f /\f/ 换页符
- \b /\b/ 空格
字符集
字符集使用
[]表示的可能的字符的集合,集合内部可以排列多个匹配字符串的可能性,整个字符需要匹配的是字符串中的一个字符。多选一的效果。有一个满足就匹配成功。-
简单类:
- 正则的多个字符对应一个字符,可以用[]把他们括起来,只要在[]内有一个满足匹配条件就匹配成功。
- 例如:/[abc]/.test("erta") 表示只要包含abc三个字符的任意一个就匹配成功。
-
范围类:
- 如果匹配的东西过多,而且类型又相同,可以在中间加个横线。[a-z]、[0-9]、[A-Z]
- 例如:/[0-9]/.test(""abc8) 表示匹配0-9之间的字符,包含0-9。
-
负向类:
- []前面加个元字符进行取反,表示匹配不能为括号里面的字符。取反。
-
组合类:
- 允许用中括号匹配不同类型的单个字符。[0-z]
修饰符
- g 修饰符用于执行全局匹配,查找所有匹配而非在找到第一个匹配后停止。
- "12z12b12c".match(/\d+/g) ==> ["12", "12", "12"]
- i 修饰符用于执行对大小写不敏感的匹配。如果不配和
g修饰符,表示匹配到第一个字符就停止匹配,可以配合g修饰符使用。- "12Ab".match(/[a-z]/gi) ==> ["A", "b"]
边界
- ^ 表示以什么字符开头,如果在[]使用,表示取反。
- /^a/.match("dfgabc")
- $ 表示以什么字符结尾。
预定义类
- . 除了换行和回车之外的任意字符
- \d 数字字符
- \D 非数字字符
- \s 空白字符
- \S 非空白字符
- \w 单词字符,所有的字母、数字和下划线
- \W 非单词字符
量词
- {n} 硬性量词 对应零次或者n次
- 示例:/^\d{5}$/.test("123456")
- {n,m} 软性量词 至少出现n次但不超过m次,使用的时候中间不能有空格
- 示例:/^\d{3,5}$/.test("123456")
- {n,} 软性量词 至少出现n次
- 示例:/^\d{3}$/.test("123456")
- ? 软性量词 出现零次或者一次
- 示例:/^\d?$/.test("1")
-
软性量词 出现零次或多次- 示例:/^\d*$/.test("12345")
-
-
软性量词 出现一次或者多次,至少出现一次- 示例:/^\d+$/.test("123")
-
分组
- 如果想获取重复的多个字符,可以使用小括号进行分组。
- 语法:/(abc){2}/.test("byebye")
或操作符
- 可以使用竖线
|字符表示或者的关系 - 语法:
- /a|bcd/.test("bcdsga") 匹配a或bcd字符
- /(ab)+|(cd)+/ 匹配出现一次或多次的ab或者cd
分组的反向引用
反向引用标识是对正则表达式中的匹配组捕获的子字符串进行编号,如果再表达式内进行引用,通过"\编号" 进行引用,如果在表达式外进行引用,则通过"$编号"进行引用。从1开始计数。
-
示例:
- /(bye)\1/.test("byebye") ==> true
- /(bye)\1/.test("bye") ==> false
- '123456'.replace(/(/d{3})*(/d{3})/, '
1') ==> "456123"
- '123*456'.replace(/(/d{3})*(/d{3})/, function(match,
2) {return
1})
中文字符
- 匹配中文:[\u4e00-\u9fa5]