js中正则表达式详解
为什么要学习正则表达式
很多人对正则表达式的概念就是“用的时候到网上查一个”就行了,我之前也一度这样认为,直到面试做笔试题的时候,看到一个邮箱验证,手写正则表达式,哇哦,只能空白跳过,
总结了一下,如果你是一个初级程序员,对于正则表达式模棱两可也OK的,但是如果你是一个高级程序员,你就要知其然,也要知其所以然,所以我决定把js中的RegExp对象彻底搞懂。
正式开始介绍正则表达式在js中的应用
1. 意义:
正则表达式是描述字符模式的对象;用于对字符模式匹配及检索替换,是字符串执行模式匹配的强大工具。官方推荐使用正则来做匹配要比普通字符串匹配的效率要高。
2. 定义方式:
有两种定义方式,构造函数和直接赋值;
// 构造函数
let r1 = new RegExp(pattern, modifies)
// 直接赋值
let r2 = /pattern/modifies
pattern:模式
modifies:修饰符
3. 修饰符取值:
i:区分大小写
g:全局匹配
m:执行多行匹配
4.pattern语法
- [] :用于查找某范围内的字符,其中使用^可以进行 非 匹配;
- (red|blue|yellow): 用于精确字符串的或取值;
- Metacharacter :
记忆方式:由小写切换成大写的一般为【非】的匹配 - 量词
5.RegExp 对象方法
exec(str) 检索 str 的值 ,返回 位置 index
test(str) 检索str的值,返回boolean
toString()
6.RegExp对象属性
constructor 返回一个函数,该函数是一个创建 RegExp 对象的原型。
global 是否包含g 返回 boolean
ignoreCase 是否包含i 返回boolean
lastIndex 规定下一次匹配的初始位置
multiline 是否包含m 返回 boolean
source 匹配模式(即pattern的值)
7.使用举例
- 邮箱格式匹配
/^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$/i;
^: 开始标志;$: 结束标志;
[a-z]: a到z之间的一个小写字母字符;
(
[a-z0-9]: 匹配0个或者多个英文字母或者数字(即用户要么输入数字或者字母,要么不输入,但是不能输入其他格式);
[-_]?: 匹配0个或者1个[-_] ()
[a-z0-9]+
)* 匹配如果输入必须是前面的字符
@
([a-z0-9][-_]?[a-z0-9]+): 与前面同理
[\.]:对 . 语法进行转义,转义为.字符匹配
[a-z]{2,3}: 输入a-z之间的字符,数量限定为2-3个
([\.][a-z]{2})?:与前面同理
i:区分大小写
- 身份证号格式匹配
/(^\d{15}$)|(^\d{17}([0-9]|X)$)/g
15位或者18位带有X的
注:
^只有放在[]内部含义为非;
限定不能连续输入某些字符时,使用 ?语法 匹配;
限定要么不输入要么输入某些字符时,使用 *语法 匹配;
限定输入一次或者多次的时候,使用+匹配