正则表达式
正则表达式
1.定义
- 对字符串进行描述的
2.作用
- 表单验证
- 验证 邮箱/电话/邮编......
- WEB编辑器
- 爬虫、数据抓取、小偷程序
3.定义正则表达式
- 直接量
- 函数
- 构造函数
正则表达式基础
1.原子
- 正则表达式的最小组成单位
- 普通的字母、数字、符号都是原子
- 转义字符
- 字符类
2.字符直接量(原子)
- 原子的重要组成
- 普通的字母、数字、符号
- \n
- \t
- \r
- \v
- \f
- \
- \b 退格符
- \x00
- \u0000
- \unicode编码
- 正则表达式里面具有特殊意义的字符 需要转义
3.字符类(原子)
- \d 数字 [0-9]
- \D 除了数字之外的字符 [^0-9]
- \w 数字、字母、下划线 [0-9a-zA-Z_]
- \W 除了数字、字母、下划线 之外的字符 [^0-9a-zA-Z_]
- \s 空白符 [\n\t\v\r\f ]
- \S 除了空白符之外的字母 [^\n\t\v\r\f ]
- . 除了换行外所有的字符 [^\n\r]
- [...]
- [^...]
- [\b] 匹配退格符
4.重复(对原子的数量修饰)
-
+表示前面原子出现1次或多次 -
?表示前面原子出现0次或1次 -
*表示前面的原子出现0次1次或多次 任意次 -
{m} 前面的原子出现m次
-
{m,n}前面的原子出现m到n次
-
{m,} 前面出现的原子个数m次以上
-
正则默认会贪婪匹配,阻止贪婪匹配在数量修饰符的后面 加?
var reg = /\w+e/;
var reg = /\w+?e/;
var str = "orangeapple";console.log(reg.exec(str));
5.指定匹配出现的位置(对原子位置的修饰)
-
\b 单词边界
-
\B 不是单词边界
-
^ 字符串开始边界
-
$ 字符串结束边界
-
先行断言(正向预查) (?=)
console.log(/apple(orange)/.exec("appleorange"))
console.log(/apple(?=orange)/.exec("appleorange"));
console.log(/apple(?=orange)/.exec("orangeapple"));//null
console.log(/apple(?!orange)/.exec("orangeapple"));
console.log(/apple(?!orange)/.exec("appleorange"));//null
console.log(/apple(?!orange)/.exec("appleab")); -
负向先行断言(负向预查) (?!)
console.log("");
console.log(/(?=p)apple/.exec("apple"));//null
console.log(/(?=p)apple/.exec("papple"));//null
console.log(/apple(?=p)/.exec("applep"));//["apple", index: 0, input: "applep"]
console.log(/^apple(?=p)$/.exec("applep"));//null
正向:
(?=exp) 零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式。
(?<=exp) 零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式。
负向:
(?!exp) 零宽度负预测先行断言,它断言此位置的后面不能匹配表达式。
(?<!exp) 零宽度负回顾后发断言,它断言此位置的前面不能匹配表达式。
6.模式单元 ()
-
改变优先级
//改变优先级
console.log(/apple|orange/.test("apple"));
console.log(/appl(e|o)range/.test("apple"));
console.log(/appl(e|o)range/.test("applorange"));
console.log("");
/*控制台输出
true
false
true
*/ -
把多个原子当做一个原子
//把多个原子当做一个原子
console.log(/abc{4}/.test("abcccc"));
console.log(/(abc){4}/.test("abcccc"));
console.log(/(abc){4}/.test("abcabcabcabc"));
/*
true
false
true
*/ -
把模式单元匹配的内容暂存内存 (?😃 可以取消暂存内容
//模式单元的内容会 单独存储到内存中
console.log(/abc/.exec("123abc123abc"));
console.log(/a(b)c/.exec("123abc123abc"));
console.log(/(ab)c/.exec("123abc123abc"));
console.log(/(ab)(c)/.exec("123abc123abc"));
console.log(/(ab)(?:c)/.exec("123abc123abc")); -
暂存内存的内容可以被反向引用
7.修饰符(模式修正符)
-
i 正则表达式不区分大小写
// i 不区分大小写
console.log(/^aAbB$/.test("aabb"));//falseconsole.log(/^aAbB$/i.test("aabb"));//true
-
m 允许多行(换行被当做字符串结束符)
// m 多行模式 字符串边界
console.log(/^a/.exec("orange\naplle"));//null
console.log(/^a/m.exec("orange\naplle"));
console.log(/\w$/m.exec("orange\naplle"));
console.log(/\w$/.exec("orange\naplle")); -
g 全局匹配
正则的使用
1.RegExp对象
- test() true/false
- exec() 数组/null
2.String对象
-
search() 匹配成功(第一次满足正则的位置) 匹配失败(-1)
//search
console.log("abc123".search(/\d{2}/));//3
console.log("abc123".search(/^\d{2}/));//-1 -
match() 匹配成功(返回数组 全局匹配影响) 失败(null)
//match
console.log("1abc34io".match(/[a-z]{2}/));//["ab", index: 1, input: "1abc34io"]
console.log("1abc34io".match(/a-z/));//["c3", "3", index: 3, input: "1abc34io"]
console.log("1abc34io".match(/[a-z]{2}/g));//["ab", "io"]
console.log("1abc34io".match(/[a-z]{9}/g))//null -
replace() 替换
//replace
console.log("hellolelabc".replace("l","艾尼"));//he艾尼lolelabc
console.log("hellolelabc".replace(/l/g,"艾尼"));//he艾尼艾尼o艾尼e艾尼abc
console.log("hellolelabc".replace(/\w/g,"艾尼"));//艾尼艾尼艾尼艾尼艾尼艾尼艾尼艾尼艾尼艾尼艾尼 -
split() 把字符串分割为数组
//split
var message="jin.jack,rack,rose,tom.lili,yanyan";console.log(message.split(","));//["jin.jack", "rack", "rose", "tom.lili", "yanyan"]
console.log(message.split(/[,.]/));//["jin", "jack", "rack", "rose", "tom", "lili", "yanyan"]
判断邮箱var email=/[1]{1,12}@[\w.]{1,10}[\w]{1,5}$/;
判断密码var password=/[\w_]{6,18}/;
判断用户名var username=/[a-zA-Z_\w]{4,16}/;
实现 在表单中输入 银行卡 自动加4位加空格;
\w ↩︎

浙公网安备 33010602011771号