正则

49 阅读2分钟

正则

处理字符串规则

作用

验证字符串

可以约束字符串的规则。验证字符串是否符合某种规则

正则.test(字符串) 返回布尔值

ini
var str = 'jkasdh13212312312fkjashdf'
var bool = reg.test(str)
console.log(bool);

字符串.search(正则) 返回下标或-1

从字符串中找符合规则部分,找到了就返回下标,找不到返回-1

ini
var str = 'jkasdh13212312312fkjashdf'
var index = str.search(reg)
console.log(index);

提取字符串

正则.exec(字符串) 返回数组

将符合规则部分,放在一个数组中

ini
var str = 'jkasdh13212312312fkjashdf'
var arr = reg.exec(str)
console.log(arr);

字符串.match(正则) 返回数组

将符合规则部分,放在一个数组中

ini
var str = 'jkasdh13212312312fkjashdf'
var arr = str.match(reg)
console.log(arr);

替换字符串

可以将字符串中满足规则部分替换成新的部分

字符串.replace(正则, 新内容)

将字符串中符合规则的部分替换成新内容,返回替换后的新字符串

ini
var str = 'jkasdh13212312312fkjashdf'
console.log( str.replace(reg, '*'.repeat(11)) );

定义

字面量定义方法

var reg = /规则/

javascript
var reg = /abc/
console.log(reg);
console.log(typeof reg);
console.dir(reg)

构造函数方式

var reg = new RegExp('规则')

javascript
var reg = new RegExp('abc')
console.log(reg);

组成部分

字符

普通字符

普通字符串中的字符

javascript
var reg = /abc/ // 表示我们的规则:带有字符a
var str = 'asdfasfdabc'
console.log( reg.test(str) );

元字符

特殊字符

\d

代表一个任意数字

javascript
var reg = /\d/ // 意思:包含1个数字
var str = 'a0123456asdfasdfbcd'
console.log( reg.test(str) );
\w

代表一个 任意 数字、字母、下划线

javascript
var reg = /\w/ // 意思:包含1个 任意的数字或字母或下划线
var str = '!@asdfkjlkjahsdf$%^'
console.log(reg.test(str));
\s

代表一个空格

ini
var reg = /\s/
var str = 'aasjdfhakjsdhfka'
console.log(reg.test(str));
.

代表一个任意字符

ini
var reg = /./
var str = '@'
console.log( reg.test(str) );
\D

非\d的意思,代表一个非数字

\W

非\w的意思,代表一个非数字字母下划线

\S

非\s的意思,代表一个非空格

修饰符

修饰次数

+

代表前面的字符需要最少1次

javascript
var reg = /\d+/ // 意思:最少1个数字
var str = 'abc123def'
console.log( str.match(reg) );
?

代表前面的字符最多1次

javascript
var reg = /\d?/ // 字符串中是否包含  最多1个数字,没有数字也可以
var str = 'asdjkfhk'
console.log( reg.test(str) );
*

代表前面的字符可以是任意次

javascript
var reg = /\d*/ // 意思:字符串中是否包含 任意个数字
var str = 'abc123def'
console.log( str.match(reg) );
{n}

代表前面的字符必须是n次

javascript
var reg = /\d{2}/ // 意思:字符串中是否包含了 连续的两个数字 等同于 /\d\d/ 
var str = 'asjdfhk69789jas'
console.log( reg.test(str) );
{n,}

代表前面的字符最少是n次

javascript
var reg = /\d{2,}/ // 意思:包含了最少2个数字
var str = 'asjdfhk6jas'
console.log( str.match(reg) );
{n,m}

代表前面的字符最少是n次,最多是m次

javascript
var reg = /\d{2,5}/ // 意思:包含了最少2个数字,最多5次
var str = 'asjdfhk62333999jas'
console.log( str.match(reg) );

修饰开头结尾

开头的修饰符 ^

修饰字符串必须以他后面的字符开头 - 通常这个符号放在具体规则的最前面

javascript
var reg = /^\d+/ // 字符串必须以\d开头
var str = 'bbb123abc'
console.log( reg.test(str) );

^ 放在[]中就表示取反的意思

javascript
var reg = /[^ab]/ // 非a和b
var str = 'ab4'
console.log(reg.exec(str));
结尾修饰符 $

修饰字符串必须以他前面的字符结尾 - 通常这个符号放在具体规则的末尾

javascript
var reg = /\d$/ // 字符串必须以\d结尾
var str = 'abc234d5'
console.log( reg.test(str) );

其他

[] 是其中的任意一个

修饰其中的字符,整个中括号代表一个字符,是其中的任意一个

javascript
var reg = /[abc]/ // 一个字符,a或b或c
var str = 'ddwerd'
console.log( reg.test(str) );
| 在正则表示或者的意思
javascript
var reg = /a|b|c/ // 等同于[abc]
var str = 'ddwecrd'
console.log( reg.test(str) );
() 这是一个单元(整体)
javascript
var reg = /ab|cd/ // ab | c    ab | cd    a b|c d   a b|cd   有歧义
// 所以加括号来表示
var reg = /\d(ab|cd)/ // ab或cd
var reg = /(ab|c)d/ // ab或c    abd或者cd
var reg = /a(b|c)d/ // b或c      abd或acd
var reg = /a(b|cd)/ // b或cd    ab或acd
i 放在两个斜杠后面
css
var reg = /a/i // 字符串是否包含aA
var str = 'A'
console.log( str.match(reg) );
g 开启贪婪模式
javascript
var str = 'i love html very much and html is very good'
//将其中的html替换成js
var reg = /html/
var reg = /html/g
console.log( str.replace(reg, 'js') );
- 到
\ 转义
[\u4e00-\u9fa5] 任意一个汉字

放在特殊符号去前面

网易邮箱的规则

规则:字母开头,数字字母下划线组成,6~18位

ini
var reg = /^[a-zA-Z]\w{5,17}@(163|126).com$/
var str = 'zhaotianyin1@163.com'
console.log( reg.test(str) );

qq号规则

规则:不能用0开头,5~10位任意数字

javascript
var reg = /^[1-9]\d{4,9}$/
var reg = /^[1-9]\d{4,9}@qq.com$/

手机号正则

规则:1开头,第二个数字3-9,其余9个数字是任意的

javascript
var reg = /^1[3-9]\d{9}$/

提取字符串中所有的中文姓名

ini
var str = "张三:1000,李四:50000,王五:800。";
var reg = /[\u4e00-\u9fa5]{2,}/g
console.log( str.match(reg) );