正则表达式(一)

(一)介绍

正则表达式(Regular Expression)简写:RegExp

(二)创建

// 字面量创建
var reg1 = /(a|b|c)/

// 内置构造函数创建
var reg2 = new RegExp('(a|b|c)')

正则表达式是一个复杂数据类型 ( object )

// 字面量创建
var reg1 = /(a|b|c)/

// 内置构造函数创建
var reg2 = new RegExp('(a|b|c)')

console.log(typeof reg1) // object

(三)作用

1. 专门用来验证字符串是否符合规则

语法:正则.test(要检测的字符串)

返回值:true/false

// 字符串中包含 a或b或c
var reg1 = /(a|b|c)/

console.log(reg1.test('abcd')) // true
console.log(reg1.test('hhdh')) // false

2. 从字符串里面获取一些符合规则的内容

语法:正则.exec(要检测的字符串)

(1)字符串中没有符合规则的子字符串 返回null

var reg1 = /(a|b|c)/
console.log(reg1.exec('hhdh')) // null

(2)字符串中有符合规则的子字符串

返回值是一个数组,索引值0是匹配的字符串,只匹配第一个符合条件的字符串

var reg1 = /(a|b|c)/

console.log(reg1.exec('abcd')[0]) // a

(四)元字符

(1)\s 空格

// 只要有一个空格就可以
var reg1 = /\s/

console.log(reg1.test(' abcd')) // true
console.log(reg1.test('abcd ')) // true
console.log(reg1.test('ab cd')) // true
console.log(reg1.test('abcd')) // false

(2)\d 数字 (一个\d只表示一个数字)

// 只要有一个数字就可以 0-9
var reg1 = /\d/

console.log(reg1.test('1abcd')) // true
console.log(reg1.test('abcd')) // false

(3)\D 表示一个非数字

// 只要有一个非数字就OK
var reg1 = /\D/

console.log(reg1.test('1abcd')) // true
console.log(reg1.test('23232323')) // false

(4)\w 数字字母下划线 三种符合一个就可以 任选其一

var reg1 = /\w/

console.log(reg1.test('1abcd')) // true
console.log(reg1.test('%%¥¥&&*')) // false

(5)\W 数字字母下划线 以外的 任意一个都行

var reg1 = /\W/

console.log(reg1.test('1abcd')) // false
console.log(reg1.test('%%¥¥&&*')) // true

(6)\ 转义符

(五)边界元字符

(1)^ 表示字符串需要以什么开始

// 以一个数字开头
var reg1 = /^\d/

console.log(reg1.test('erer')) // false
console.log(reg1.test('2erer')) // true


// 以 a 或者 b 或者 c 开头
var reg2 = /^(a|b|c)/

console.log(reg2.test('erer')) // false
console.log(reg2.test('cdfdf')) // true

(2)$ 表示字符串需要以什么结尾

// 以一个数字开头 同时这个数字也是结尾 也就是只能有一个数字
var reg1 = /^\d$/

console.log(reg1.test('erer')) // false
console.log(reg1.test('2')) // true

// 以 a 或者 b 或者 c开头 以一个数字结尾
var reg2 = /^(a|b|c)\d$/

console.log(reg2.test('a3')) // true
console.log(reg2.test('cdfdf')) // false

(六)限定元字符

(1)* 表示出现 0 - n次

// 出现 0 - n 个数字 
var reg1 = /\d*/

console.log(reg1.test('lfff')) // true 0 个数字
console.log(reg1.test('fdf2545dd')) // true 多个数字

// 0-n 个数字开头并且是结尾 也就是说字符串只能是数字 或者空
var reg2 = /^\d*$/

console.log(reg2.test('lfff')) //false
console.log(reg2.test('234343')) // true
console.log(reg2.test('')) // true 0次数字

(2)+ 表示出现 1 - n 次

// 1个或者多个数字
var reg1 = /\d+/

console.log(reg1.test('lfff')) // false
console.log(reg1.test('234343')) // true


// 一次或者多次开头并且结尾 不能是空字符串
var reg2 = /^\d+$/

console.log(reg1.test('')) // false
console.log(reg1.test('234343')) // true

(3)?表示出现 0 - 1次

// 只能有0-1个数字
var reg1 = /^\d?$/

console.log(reg1.test('')) // true
console.log(reg1.test('234343')) // false
console.log(reg1.test('3')) // true
console.log(reg1.test('====')) // false

(4){ n } 指定出现次数

// 出现三次数字 必须
var reg1 = /^\d{3}$/

console.log(reg1.test('')) // false
console.log(reg1.test('234')) // true
console.log(reg1.test('3')) // false

(5){n, } 表示出现 n 次到多次

// 出现3次以上
var reg1 = /^\d{3,}$/

console.log(reg1.test('')) // false
console.log(reg1.test('234445')) // true
console.log(reg1.test('3')) // false

(6){ n, m }表示出现 n 到 m 次

// 3 次到 6次
var reg1 = /^\d{3,6}$/

console.log(reg1.test('2')) // false
console.log(reg1.test('234445')) // true
console.log(reg1.test('2344457')) // false 7次

(七)正则的贪婪和非贪婪

(1)贪婪,按满足条件的最大长度去捕获

// 捕获一个至多个数字
var reg1 = /\d+/

console.log(reg1.exec('sd2')[0]) // 2
console.log(reg1.exec('dsd234445dsd')[0]) // 234445
console.log(reg1.exec('sdsd2344457dsd')[0]) // 2344457

(2)非贪婪,按满足条件的最小长度去捕获 (限定元字符后面加?)

// * (0 至 多个)后面加? 非贪婪,最小的去捕获(0个)
var reg1 = /\d*?/

console.log(reg1.exec('sd2')[0]) // ''
console.log(reg1.exec('dsd234445dsd')[0]) // ''
console.log(reg1.exec('sdsd2344457dsd')[0]) // ''
// + (1 至 多个)后面加? 非贪婪,最小的去捕获(1个)
// 第一个数字
var reg1 = /\d+?/

console.log(reg1.exec('sd2')[0]) // 2
console.log(reg1.exec('dsd234445dsd')[0]) // 2
console.log(reg1.exec('sdsd2344457dsd')[0]) // 2

// ? (0 至 1个)后面加? 非贪婪,最小的去捕获(0个)
// 第一个数字
var reg1 = /\d??/

console.log(reg1.exec('sd2')[0]) // ''
console.log(reg1.exec('dsd234445dsd')[0]) // ''
console.log(reg1.exec('sdsd2344457dsd')[0]) // ''

// {3, } (3 至 多个)后面加? 非贪婪,最小的去捕获(3个)
// 第一个数字
var reg1 = /\d{3,}?/

console.log(reg1.exec('dsd234445dsd')[0]) // 234
console.log(reg1.exec('sdsd2344457dsd')[0]) // 234

// 如果数字少于3个会报错

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值