正则表达式:
创建正则表达式
1、字面量创建正则表达式:用 / /
包裹正则表达式的语句
let hd = "baidu.com";
let a = 'u';
console.log(/u/.test(hd));
// eval():把字符串解析为js语句
console.log(eval(`/${a}/`).test(hd));
2、使用对象创建正则表达式:
let hd = "baidu.com";
let a = 'u';
let reg1 = new RegExp('u','g'); // 表示创建了一个正则表达式: /u/g
let reg2 = new RegExp(a,'g');
console.log(reg2.test(hd));
let reg3 = new RegExp('uhh','g'); // ==> /uhh/g
或匹配
1、选择符:
(1)或 :| 检测的不是|左右两边的单个字符,而是整个字符
2、[]–元子表 ()–元子组
[]也有或的意思,非匹配完整的,[] 匹配单个字符
let reg2 = /(12|3456)/; // 表示12是个整体或者3456是个整体
转义
1、正则表达式中的转义:
/d
表示匹配数字,+
表示匹配多个数字
所以也可以把/d
理解为转义后的- [a-z]{3,6} // 表示匹配3到6位的a-z之间的字母
[a-z] // 表示只匹配一个a-z之间的字母 .
有两层含义:优先级较高的含义----除换行符外任何字符;较低含义----普通字符点- 转义:由优先级较高的含义变为优先级较低的含义
let price = 23.34;
console.log(/\d+\.\d+/.test(price));
let reg = new RegExp('\d+\.\d+'); // ==> /d+.d+/
// 因为字符串中的內容无论怎么转义都是低级含义
// 想要转义成功则多加一个斜杠:
let reg2 = new RegExp('\\d+\\.\\d+'); // ==> /\d+\.\d+/ */
test、exec、match的区别
1、正则表达式中test、exec、match的区别:
- test、exec是RegExp对象的方法,match是String对象的方法
- test:test 返回 Boolean,查找对应的字符串中是否存在模式。
var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(reg.test(str));
- exec:exec 查找并返回当前的匹配结果,并以数组的形式返回。
var str = "1a1b1c"; var reg = new RegExp("1.", ""); var arr = reg.exec(str);
- match:match 是 String 对象的一个方法。
var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(str.match(reg));
边界约束
1、字符边界约束:
^
限定起始边界 ,$
限定结束边界
let zxt = '1ff4gt';
console.log(/\d/.test(zxt)); // 表示只要字符串中包含数字就匹配成功,因为左右都没有限定
console.log(/^\d$/.test(zxt)); // 表示以数字开始以数字结束:
数值与空白元字符
1、数值与空白元字符:
+元字符:正则表达式中的最小单元字符,表示一类字符中的一个
+\s
表示匹配空白:如换行符、制表符、分页符、空格 ,\S
表示除了空白
+\d
表示匹配数字,\D
表示除了数字
-
新一层理解:加上
g
就是一直扫描到结尾,不加就是第一次匹配成功后碰到不匹配的字符就结束;加上s
是单行模式 -
[] 元子表表示里面有什么就要什么:不在乎顺序
let zxt1 = 'x200xx 2';
console.log(zxt1.match(/[\d\w]/g)); // ==> ["x", "2", "0", "0", "x", "x", "2"]
console.log(zxt1.match(/[\d\w]+/g)); // ==> ["x200xx", "2"]
- 元子表中加上^的含义:
/[^\d\w]/
表示除了^
之后的都要
let zxt2 = 'x200xx李四2';
console.log(zxt2.match(/[^\d\w]/g)); // ==> ["李", "四"]
console.log(zxt2.match(/[^\d\w]+/g)); // ==> ["李四"]
- 新一层理解:
+
表示匹配一个或多个 - 新一层理解:没有加上元子表的时候按顺序匹配
如:
let zxt1 = 'x200xx 2';
console.log(zxt1.match(/\d\w/g)); // ==> ["20","0x"]
扫描到末位只有 20 和 0x 符合这个 \d\w 顺序
w和W元字符、点元字符
1、w和W元字符
/w
:表示匹配字母、数字、下划线
2、点元子符的使用(范围更广):表示匹配除了换行符外的所有字符
单纯匹配 .
需要转义
let zxt = `
hhhh
jjjj
`
console.log(zxt.match(/.+/)); // 只匹配到了 hhhh ,因为没有限制开头,但是碰到换行符就停止了
console.log(zxt.match(/.+/s)); // 加上`s`视为单行匹配模式
nsole.log(zxt.match(/.+/)); // 只匹配到了 hhhh ,因为没有限制开头,但是碰到换行符就停止了
console.log(zxt.match(/.+/s)); // 加上`s`视为单行匹配模式