正则表达式
正则用来定义一些字符串的规则,程序可以根据这些规则来判断一个字符串是否符合规则
也可以将一个字符串中符合规则的内容提取出来。
创建正则表达式
1.构造函数来创建对象
var reg = new RegExp("正则表达式", "匹配模式");
// test()方法
reg.test("字符串"); // 满足 true,不满足 false
这种方式更加灵活,第一个参数可以传一个变量
注意:使用构造函数时,由于它的参数是一个字符串,而 是字符串中转义字符,如果要使用 则需要使用 来代替
2.字面量创建
var reg = /正则表达式/匹配模式; // 这里正则不加 "",因为是字面量,也不能加变量
// 匹配模式可以多个一起写:/ig
let reg = /ab/ // 包含有"ab"
这种方式虽然简单,但会把正则写死,不灵活
语法:
匹配模式(修饰符):
- i 忽略大小写(ignore)
- g 全局匹配模式(默认为匹配1次)
设置匹配模式时,可以都不设置,也可以设置1个,也可以全设置,设置时没有顺序要求
表达式
- | 或
- [] 或
- [^ ] 除了
表达式 | 描述 |
---|---|
[abc..] | 查找方括号内的任意一个字符 |
[^abc..] | 查找不包括方括号内的任何字符 |
[a-z] | 查找小写字母 |
[A-Z] | 查找大写字母 |
[A-z] | 任意字母,但是还包括了其他ASCII在此之中的 相当于/[a-z]/i |
[0-9] | 任意数字 |
[x-y] | x的 ascii码到 y的 ascii码之间的值 |
() | 结合成一组 |
元字符
在正则表达式中使用 作为转义字符,若要找 则用 \
元字符 | 描述 |
---|---|
. | 表示任意一个字符 若要查找 . 本身,则用 . 若是在构造函数里,则用 . ,而 . 则表示 元字符 . ,因为构造函数里本身传的是字符串 |
w | 任意字母、数字和 _ ,[A-z0-9_] |
W | 除了字母、数字和 _ ,[^A-z0-9_] |
d | 任意的数字,[0-9] |
D | 除了数字,[ ^0-9] |
s | 空格 |
S | 除了空格 |
单词边界 例如: /child/ ,在“children” 是true,而 /child/ ,是false |
|
B | 除了单词边界 |
量词
通过量词可以设置一个内容出现的次数
量词只对它前边的一个内容起作用
量词 | 描述 |
---|---|
{n} | 正好出现n次 |
{m,n} | 出现m 到 n次 |
{m,} | m次以上 |
n+ | 至少有一个n,相当于 n{1,} |
n* | 0个或 多个n,相当于 n{0,} |
n? | 0个或 1个n,相当于 n{0,1} |
^n | 以n 开头 |
n$ | 以n 结尾 |
注意:如果在正则表达式中同时使用了 ^ $ 则要求字符串必须完全符合正则
//要求以a开头 或者 以a结尾
let reg = /^a|a$/;
let reg = /[^a$]/;
// 要求以a开头 并且 以a结尾
let reg = /^a.*a$/;
//只去掉两端的空格
let s = " f afa ";
let reg = /^s*|s*$/g; // 相当于 /(^s*)|(s*$)/g
s = s.replace(reg, "");
// 也可以使用 s.trim() 去掉两端空格 方法
方法:
方法名 | 描述 |
---|---|
test() | 可以用来检查一个字符串是否符合正则表达式 如果符合返回true,否则返回false |
exec | 检索字符串中指定的值。有,则返回该匹配的值,并确定其位置;没有,则返回 null |