正则表达式的简单理解
正则表达式概念:一个有规则的表达式
简单的说就是一个用于查找的通配符
正则表达式对象
-> js 正则表达式对象 就是 由 正则表达式创建的对象, 该对象可以进行 匹配, 提取 和 替换.
创建正则表达式对象
- 构造函数
var regex = new RegExp( 正则表达式字符串[, 匹配模式] );- 字面量
var regex = /正则表达式/;
//创建正则对象的两种方法
var reg = new RegExp()
// console.dir(reg);
var regE = /\k/
// console.log(regE);
// var str = 'abc'
//判断字符串中是否有符合的字符 语法:正则对象.test(字符串) 返回值boolean
// console.log(regE.test(str));
var str = 'abcdefghijklmnopqrstuvwsyz'
//寻找符合的字符,返回boolean
var bl = str.includes('op')
console.log(bl);
//寻找符合的字符,返回符合的字符的下标
var c = str.search('op')
console.log(c)
使用正则表达式进行匹配
语法:
正则对象.test( 字符串 ) -> boolean
如果参数字符串中含有 符合 正则匹配的 字符串, 就返回 true, 否则返回 false
例如:reg.test(str)
var reg = /[sr]/
//转义字符 \(\) \{\} \. \\
// var reg = /\(1\)/
var str = 'string'
console.log(reg.test(str));
基本元字符
// . 表示任意一个非换行字符
// []表示一个字符,出现在[]中的字符
// | 或者
// var reg = /./
// var reg = /[s]/
var reg = /[sr]/
//转义字符 \(\) \{\} \. \\
// var reg = /\(1\)/
var str = 'string'
console.log(reg.test(str));
//如果要显示表示阿拉伯数字0到9,可以简写为
[0-9]
//如果要显示表示大写英文字母A到Z,可以简写为
[A-Z]
//如果要显示表示小写英文字母a到z,可以简写为
[a-z]
//亦可以合并来写
[0-9a-zA-Z] //表示限定字符为阿拉伯数字0到9,小写英文字母a到z,大写英文字母A到Z
//要注意写成[9-0][z-a][Z-A]这种逆序的写法是错误的
. 任意的一个字符. 没有任何限制
[] 是出现在[]中的一个字符. 认为是 . 的限制级版本[abc]:等同于:a 或者 b 或者 c
| 可以认为是 允许使用多个字符的 匹配
限定元字符
// /字符(串)*/ 紧跟前面的字符出现0次或者多次
// var reg = /123*/
// /字符(串)+/ 紧跟前面的字符出现1次或者多次
// var reg = /123+/
// /字符(串)?/ 紧跟前面的字符出现0次或者1次
// var reg = /123?/
// /字符(串){number}/ 紧跟前面的字符连着出现{number}次
// var reg = /1{2}/
// /字符(串){number,}/ 紧跟前面的字符至少连着出现{number,}次
// var reg = /1{2,}/
// /字符(串){number1,number2}/ 紧跟前面的字符连着出现{number1,number2}次,至少连着出现number1次,可以出现更多次
var reg = /1{2,3}/
着重记忆:限定元字符都是限定紧跟着的字符,若是不是连续出现的字符,虽然也出现了限定的次数判断式任然会返回false值
首尾正则表达式
// /^字符/ 以该字符开头
// /字符$/ 以该字符结尾
// var reg = /^a+$/ 意思为限定字符得全部为a,则之个字符串得全部是a组成的
var reg = /^1[3578]{1}[0-9]{9}/ //限定以1开头
var str = '15345678910'
console.log(reg.test(str));
var regE = /b$/ //限定以b结尾
console.log(regE.test('aaab'))
简写元字符
\s 空白字符, 包括空格, tab, 回车换行等
\S 非空白字符
js 中常常使用 [\s\S] 表示任意字符
\w 表示字符, 包含字母, 数字, 下划线.
\W 非字符
\d 数字
\D 非数字
// \s空白字符,包括空格、tab、回车换行等
// \S非-----
// \w表示字符
// \W--非字符,例如键盘上的回车等
// \d数字
// \D非--
var str = 'martin@163.com'
// 我有一个邮箱, 是 , 还有 abc@126.com, 和 1234567@qq.com
var reg = /\w/
console.log(reg.test(str));
提取
使用正则表达式可以进行匹配, 使用 exec 可以将匹配到的数据提取出来
语法: 正则表达式对象.exec( 字符串 ) -> 封装成数组
reg.exec(str)最后筛选不到返回null
var str = 'abc123def456hij789klmn'
var reg = /\d+/g
var arr
while (arr = reg.exec(str)) {
console.log(arr);
}
console.log(arr);
贪婪模式
凡是在正则表达式中, 涉及到次数限定的, 一般默认都是尽可能的多匹配.
取消贪婪模式. 在次数限定符后面加上 ?
注意: 贪婪模式性能会略高于非贪婪模式, 所以开发的时候. 一般不考虑贪婪的问题
只有代码匹配结果出现问题了, 一般一次多匹配了, 才会取消贪婪
var str = '<div>123</div><div>456</div>78<span>9</span>0';
//反向引用 调用之前的小括号中的部分
var reg = /<(\w+)>.*?<\/\1>/g
var arr
while (arr = reg.exec(str)) {
console.log(arr);
}
否定元字符
var reg = /[^abc]/ //不是以a或b或c开头的字符
总结
正则表达式是种严谨的用于查找的通配符,如果简单使用也要多多记忆基本的元字符,其中尤其要多多注意 () 元字符的作用,避免达不到预想的效果,而 | 或元字符优先级最低,使用时也要多多注意