# 正则表达式
一般用在表单验证
按住 ctrl 点我啊 (opens new window)
# 作用:
用来匹配字符串是否满足一定的规则。
# 用法:
1.先创建一个正则对象
// 用构造函数实现
let reg = new RegExp("规则");
// 另外一种简单的写法 ---> 以字面量的方式创建对象
let reg = /规则/;
2.调用方法,看是否满足条件(规律)
// test方法返回一个布尔值
let flag = reg.test("需要判断的字符串");
# 元字符
在匹配以什么开头,什么结尾的时候,中间要加个.
let reg = /^1(aa)$/;
console.log(reg.test("12aa")); //返回false
let reg = /^1.(aa)$/;
console.log(reg.test("12aa")); //返回true
注意一个.
只代表一个字符
let reg = /^1.(aa)$/;
console.log(reg.test("122aa")); //返回false
# 数量限定
一般要配合其他规则一起使用
# 预定义个数
*
: 可以出现任意次 (0-n)
+
: 至少出现一次 (1-n)
?
: 出现0 次或者1 次 (0-1)
使用*
: 匹配以 1 开头,aa 结尾,中间可以有任意的字符
let reg = /^1.*(aa)$/;
console.log(reg.test("1 4564hfrthuaa")); //返回true
下面这个例子为什么返回 true?
let reg = /\d?/;
console.log(reg.test("1234")); // 返回true
再次强调一下,正则表达式的作用是用来匹配字符串是否满足一定的规律,并不是要求字符串是什么样子的
可以简单的理解为,有还是没有。上面的例子,被验证的字符串中有出现一次或者零次的数字,所以返回 true。
# 非贪婪匹配模式
当
?
紧跟着其他的限制符时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串
let reg = /[0]+?/; // 匹配一次
let reg1 = /[0]+/; // 匹配多次
let s = "10000aa".match(reg);
let s1 = "10000aa".match(reg1);
console.log(s); // ["0", index: 1, input: "10000aa", groups: undefined]
console.log(s1); // // ["0000", index: 1, input: "10000aa", groups: undefined]
# 自定义个数
{n}
: 表示匹配出现 n 次
{n,}
: 表示匹配至少出现 n 次
{n,m}
: 表示匹配出现 n-m 次
let reg = /a{1}/
console.log(reg.test('1a56')); //返回true
这里和上面一样,只会关心他有没有出现1次,具体字符串是在怎么样的不管
console.log(reg.test('1aaaaa56'));//返回true
通常也要联合其他一起用
let reg = /^a\d{2}b$/;
console.log(reg.test("a123b")); //false
let reg = /a{1,}/;
console.log(reg.test("1aaaaa56")); //返回true
console.log(reg.test("156")); //返回false
let reg = /a{1,2}/;
console.log(reg.test("1aa56")); //返回true
# 其他常用元字符
# 总结
正则表达式,只能用于验证字符串是否满足条件(有还是没有),并不是要求字符串是什么样子的。
\w
和 \W
通常用于用户名的验证,注意:\w
只要出现 字母、数字、下划线 其中的一种,都会返回 true。
空白字符包括 空格、回车(\r
) 或者 换行(\n
) 、缩进(\t
)。
$
验证特定的字符串的时候记得加(), let reg = /(aa)$/
这表示验证以 aa 结尾。
.
可以匹配空格,但不能匹配\r
\n
匹配不是中文:/[^\u4e00-\u9fa5]/
()
用于提升优先级,分组
在正则表达式中对空格是敏感的