一、创建方式
正则表达式是JS的复杂数据类型
- 字面量
var reg = /abc/ - 内置构造函数
var reg = new RegExp('abc')
- 例如:
<input type="text" id="mytext">
mytext.onblur = function () {
console.log(mytext.value) // 打印输入框内失去焦点的值
console.log(reg.test(mytext.value)) //判断值是否符合正则表达
}
二、元字符
- 基本元字符
- 1.1
\d 一位数字(0~9)
var reg = /\d\d/ //两位相邻数字
console.log(reg.test('abc')) //false
console.log(reg.test('122')) //true
console.log(reg.test('1')) //false
console.log(reg.test('1a2b')) //false
- 1.2
\D 一位非数字
var reg = /\D/ //含一位非数字即可
console.log("abc") //true
console.log("123") //false
console.log("1") //false
var reg1 = /\Dk\D/ //非数字 k 非数字 相邻
console.log(reg1.test('aka')) //true
console.log(reg1.test('123a')) //false
console.log(reg1.test('1')) //false
- 1.3
\s 一位空白内容(空格 缩进 换行)
var reg = /\s/
console.log(reg.test('ak a')) //true 空格
console.log(reg.test('123\n4')) //false \n表示换行
console.log(reg.test('1')) //false
console.log(reg.test('1 ')) //true 缩进
- 1.4
\S 一位非空白内容(空格 缩进 换行)
var reg = /\S/
console.log(reg.test('ak a')) //true 注意:有一位非空白内容即可
console.log(reg.test(' ')) //false
console.log(reg.test('\n\n\n')) //false
console.log(reg.test(' ')) //false
- 1.5
\w 字母 数字 下划线
var reg = /\w\w/ //两位相邻的字母 数字 下划线
console.log(reg.test('&*')) //false
console.log(reg.test('123abc')) //true
console.log(reg.test('a')) //false
console.log(reg.test('1')) //false
console.log(reg.test('1-2')) //false
console.log(reg.test('__')) //true
- 1.6
\W 非字母 数字 下划线
var reg = /\W\W/ //两位相邻的非字母 数字 下划线
console.log(reg.test('&*')) //true
console.log(reg.test('123abc')) //false
console.log(reg.test('a')) //false
console.log(reg.test('1')) //false
console.log(reg.test('==')) //true
- 1.7
. 任意内容(换行不算) 注意:都是一位!!!
var reg = /./ //含一位任意内容(换行不算)即可
console.log(reg6.test('%^#%#^')) //true
console.log(reg6.test('bahjsd')) //true
console.log(reg6.test('ba\ncd')) //true 含‘一位’任意内容
console.log(reg6.test('\n\n')) //false
- 1.8
\ 转义字符
var reg = /\d\.\d/
//格式:数字.数字,如果不写转义符\,会被默认为数字 任意内容 数字
console.log(reg.test('1.2')) //true
console.log(reg.test('1a2')) //false
var reg = /\d.\d/
//格式:数字 任意内容(换行不算) 数字
console.log(reg.test('1.2')) //true
console.log(reg.test('1a2')) //true
- 边界符
- 2.1
^ 开头边界
var reg = /^\d/ //一位数字开头
console.log(reg.test('aab2')) //false
console.log(reg.test('1ab2')) //true
- 2.2
$ 结尾边界
var reg = /\d$/ //一位数字结尾
console.log(reg.test('aab2')) //true
console.log(reg.test('1abb')) //false
- 2.3
^开头结束$
var reg = /^abc$/ //格式:相邻的 a开头 + b + c结尾
console.log(reg.test('abc')) //true
console.log(reg.test('dabc')) //false
console.log(reg.test('abcc')) //false
- 限定符
- 3.1
* 0~多次
var reg = /\d*/ //一位数字出现0到多次
console.log(reg.test('abc')) //true
console.log(reg.test('abc1')) //true
console.log(reg.test('abc12')) //true
- 3.2
+ 1~多次
var reg = /\d+/ //一位数字出现1到多次
console.log(reg.test('abc')) //false
console.log(reg.test('abc1')) //true
console.log(reg.exec('abc126')) //exec捕获,捕获到数字126
- 3.3
? 0~1次
var reg = /\d?/ //一位数字是出现了0~1次即可
console.log(reg.test('abc')) //true
console.log(reg.test('abc1')) //true
console.log(reg.test('abc11')) //true
- 3.4
{n} 指定次数
var reg = /\d{3}/ //数字是相邻的,出现了3次即可
console.log(reg.test('abc')) //false
console.log(reg.test('abc1')) //false
console.log(reg.test('abc112')) //true
console.log(reg.test('abc1124')) //true
console.log(reg.test('abc11a24')) //false 未相邻
- 3.5
{n,} 最少n次
var reg = /\d{3,}/ //数字是相邻的,最少出现3次即可
console.log(reg.test('abc')) //false
console.log(reg.test('abc1')) //false
console.log(reg.test('abc112')) //true
console.log(reg.test('abc1124')) //true
console.log(reg.test('abc11a24')) //false 未相邻
- 3.6
{n,m} 最少n次,最多m次
var reg = /\d{3,5}/ //只要包含相邻数字3~5次 就是true
console.log(reg.test('abc')) //false
console.log(reg.test('abc1')) //false
console.log(reg.test('abc112')) //true
console.log(reg.test('abc1124')) //true
console.log(reg.test('abc123456')) //true
console.log(reg.exec('abc123456')) //捕获,12345
var reg2 = /abc{2}/ //包含abcc即可
console.log(reg2.test('abc')) //false
console.log(reg2.test('decc')) //false
console.log(reg2.test('23255cabcc1546')) //true
var reg3 = /^abc{2}$/ //a开头 b cc两次并且cc结尾
console.log(reg3.test("abcc"))
- 特殊符号
- 4.1
() 整体
var reg = /^(abc){2}$/ //相邻 abc开头 abc结尾
console.log(reg.test('abcabc')) //true
console.log(reg.test('abc12313abc')) //false
- 4.2
| 或
var reg = /a|b/ //a或b出现一个就是对
var reg1 = /(abc|def)/ //abc 或 def出现一个即可
var reg2 = /abc|def/ //c 或 d 出现一个即可
console.log(reg.test('1a3')) //true
console.log(reg.test('123')) //false
console.log(reg.test('12b')) //true
console.log(reg1.test('abcef')) //true
console.log(reg1.test('abdef')) //true
console.log(reg2.test('abc')) //true
console.log(reg2.test('def')) //true
console.log(reg2.test('ef')) //false
- 4.3
[] 表示写在 [] 里面的任意一个都行
var reg = /[abcdef]{3,5}/ //[]里面的出现3到5次即可
console.log(reg.test('xb')) //false
console.log(reg.test('abcd')) //true
console.log(reg.test('abxyz')) //false
console.log(reg.test('abdxyz')) //true
- 4.4
[^]: 反字符集合, 表示写在 [^] 里面之外的任意一个都行
var reg = /[^abc]/ //只要有一个不在这个范围内就可以
console.log(reg.test('a')) //false
console.log(reg.test('e')) //true
console.log(reg.test('deg')) //true
console.log(reg.test('abx')) //true
console.log(reg.test('dbc')) //true
- 4.5
-: 范围, 比如 a-z 表示从字母 a 到字母 z 都可以
var reg = /[a-z]/ //a-z 任意一个都可以
console.log(reg.test('a')) //true
console.log(reg.test('af')) //true
console.log(reg.test('AS')) //false
- 重复元字符
符号: \数字- \1 \2 \3
含义:表示重复第n个小括号的内容,并且要求和小括号的内容完全一致
var reg = /^(abc|def)\1$/
console.log(reg.test('abcabc')) //true
console.log(reg.test('defdef')) //true
console.log(reg.test('defdef')) //true
console.log(reg.test('defabc')) //false
// 获取span标签或者p标签
var reg = /<(span|p)><\/\1>/
console.log(reg.test('<span></span>')) //true
console.log(reg.test('<p></p>')) //true
console.log(reg.test('<div></div>')) //false
-
标识符 书写在正则外面,用来描述整个正则表达式
1. i 表示忽略大小写 2. g 表示全局
var reg = /^[abcd]$/i
console.log(reg.test('a')) //true
console.log(reg.test('A')) //true
console.log(reg.test('w')) //false