正则表达式
大约 3 分钟
元字符
默认情况下一个元字符匹配一个字符
| \d | 数字 |
| \D | 非数字 |
| \w | 字符[0-9a-zA-Z_]不包括空白字符 |
| \W | 非.. |
| \s | 空白字符 空格回车换行 |
| \S | 非.. |
| . | 除了换行以外所有的字符 |
| ^ | 限制开头 |
| $ | 限制结尾 |
量词
修饰前面一个字符出现的次数
| * | 出现 0 或多次 |
| + | 出现 1 或多次 |
| ? | 出现 0 或 1 次 |
| {n} | 出现 n 次 |
| {n,} | 出现 n 次或多次 |
| {n,m} | 出现 n 次到 m 次 |
中括号
| 例 | 内容 | 备注 |
|---|---|---|
| [abc] | 匹配一个字符,中括号中的内容都是或的关系 | 这个字符可以是 a 或 b 或 c |
| [0-9] | 匹配一个范围 | 匹配一个字符,0-9 之间的数都可以 |
| [a-z0-9] | 匹配一个范围 | 匹配一个字符,0-9 或 a-z 都可以 |
| [^abc] | 在中括号中可以取反 | 匹配一个字符,该字符是非 a 或非 b 或非 c |
小括号
提高优先级 | 或 s(u|o)n :匹配 son 或 sun
转义符
\
JS 中创建正则表达式对象
构造函数创建
var regex = new RegExp()
字面量创建
var regex = /abc/
匹配
判断字符串是否满足正则表达式的规则
regex.test('aaa')
onchange 事件
当失去焦点并且内容发生改变时才会触发
exec() 提取
正则表达式对象的方法 执行一次会将正则匹配到的一个字符串放入数组,并返回,开启全局匹配后调用一次,会往后找一个,每次只会找到一个匹配的字符串 如果需要提取一个字符串中所有符合条件的字符串,需要配合循环来使用,不推荐使用exec(),建议使用字符串的方法:match();
var str = '张三:2500,李四:3000,王五:50000'
// var reg = /\d+/gi; // gi 全局匹配并且忽略大小写
var reg = /\d+/g
do {
var content = reg.exec(str)
if (content) {
console.log(content[0]) // 类型是string
}
} while (content)
match();
String对象的方法 与exec()方法不同,如果开启全局匹配,调用一次会把所有满足条件的字符串提取出来放入一个数组 如果需要提取所有满足条件的字符串,建议使用该方法
var str = '2323@xx.com,tmf@wref.cn其他 2490ef@chinatower.com.cn'
var reg = /\w+@\w+(\.\w+)+/g
console.log(str.match(reg))
分组提取
var dateStr = '2018-3-12'
var reg = /(\d{4})-(\d{1,2})-(\d{1,2})/
reg.test(dateStr)
reg.exec(dateStr)
dateStr.match(reg)
console.log(RegExp.$1)
console.log(RegExp.$2)
console.log(RegExp.$3)
split()
切割,根据正则表达式来规定分隔符进行切割
var str = 'xxx@sina.com'
console.log(str.split(/[@.]/)) //["xxx","sina","com"]
贪婪模式和非贪婪模式
var str = '<div>aaa</div>'
str.match(/<.+>/) // ["<div>aaa</div>"]
str.match(/<.+?>/) // ["<div>","</div>"]
