6.1 Object和Function
百度搜索JavaScript MDN文档上查看
Object.keys(对象);得到某个对象的所有属性名数组
Object.value(对象);得到某个对象所有属性值数组
Object.entries(对象);得到某个对象的所有属性名和属性值数组
实例方法可以被重写
所有对象,都拥有Object的实例成员
实例方法:
toString():得到某个对象的字符串格式
默认情况下,该方法返回"[object, Object]"
valueOf():得到某个对象的值
默认情况下,返回该对象本身
在js中,当自动的进行类型转换时,如果要对一个对象进行转换,实际上是先调用对象的valueOf方法,然后对返回的结果再调用toString方法
如果调用了valueOf已经得到了原始类型,则不再调用toString
// 面试题
var obj = {
x:1,
y:'asd',
valueOf(){
return 123;
}
}
console.log(obj + 1); //结果为124
var obj = {
x:1,
y:'asd',
toString() {
return 'hello'
}
}
console.log(obj + 1); //结果为hello1
所有函数都具有Function里的实例成员
语法:arguments:在函数中使用,获取在该函数调用时,传递的所有参数(实参),如果没有传递实参,则arguments为空数组,无法映射
arguments是一个类数组(也称为伪数组:没有通过Array构造函数创建的类似于数组结构的对象),伪数组会缺少大量的数组实例方法
arguments数组中的值,会与对应的形参映射
length属性,得到函数形参数量.
name属性,得到函数名(非标准)
匿名函数的name-如果匿名函数有name就输出它的name,如果没有name,就输出该匿名函数表达式所存储的变量名
apply方法:调用函数,同时指定函数中this指向,参数以数组传递(实参)
call方法:调用函数,同时指定函数中this指向,参数以列表传递(实参)
通常,可以利用apply和call方法,将某个伪数组抓换为伪真数组
function test()
{
console.log(arguments);
//将arguments转换为真数组
var newArr = [].slice.call(arguments);
// slice内部就是用this写的
console.log(newArr);
}
test(12, 15, 912, 1, 5, 1);
toString方法:获取函数实现源码的字符串
bind方法:得到一个新函数,该函数中的this始终指向指定的值,参数传递与call相同.
6.2Array构造器
abc是Array的实例方法
var aa = new Array();
aa.abc()--->需要用构造函数new出来的对象访问
abc是Array的静态方法
Array.abc()--->直接通过构造函数访问
凡是通过Array构造函数创建的对象,都是数组
通过百度搜索Javascript Array MDN查看
改变原有数组
var arr = [1, 2, 3, 4, 5, 6];
arr.sort(function(a, b) {
return Math.random - 0.5;
})
console.log(arr);//打乱了顺序的数组
纯函数、无副作用函数:不会导致当前对象发生改变(还有其他要求,后面加入)
链式编程:每一个函数调用返回的类型一致
作业:
var arr = [1, 2, 3, 4, 5, 6, -1, -2, -3, -4, -5, -6];
去掉数组中的负数,然后对每一项平方,然后再对每一项翻倍,然后求和–要求使用Array的方法
var arr = [1, 2, 3, 4, 5, 6, -1, -2, -3, -4, -5, -6];
var newArr = arr.filter(function (ele, index, array){
if(ele >= 0) {
return true;
}
}).map(function (ele, index, array) {
ele *= ele;
ele *= 2;
return ele;
}).reduce(function (acc, ele) {
acc += ele;
return acc;
}, 0)
var arr = [1, 2, 3, 4, 5, 6, -1, -2, -3, -4, -5, -6];
var newArr = arr.filter(function(element)
{
return element >= 0;
}).map(function(element)
{
element *= element;
element *= 2;
return element;
}).reduce(function(acc, element)
{
return acc += element;
}, 0);//0是指acc的初始值,如果没有填该参数,初始值就是数组第一项,但是如果数组为空就会报错
console.log(newArr);
6.4原始类型包装器
百度搜索Number MDN/官网ECMAScript
parseInt、parseFloat要求参数是一个字符串,如果不是字符串,则会先转换为字符串。
从字符串开始位置进行查找,找到第一个有效的数字进行转换,如果没有找到,则返回NaN,左右空白字符会忽略
parseInt('123abc')---123;
parseInt('aabc124')---NaN;
parseInt('110', 2)---6
parseInt('113', 2)---3,3为无效数字,只看前面
parseInt,可以传入第二个参数(2-36),表示将给定的字符串,识别为多少进制,输出转换为十进制。
模板字符串换行
反斜杠\ 换行
字符串是一个伪数组
区别(面试可能会考)
slice:从某个位置取到某个位置(第二个参数位置取不到);位置可以是负数;
substr: 从某个位置开始取,取指定的长度(第二个参数位置可以取到);位置可以是负数;
substring:从某个位置取到某个位置;不可以是负数(负数会被转换为0);参数位置是可调换的–(写反后两个参数会自动交换位置)。
toLowerCase:将字符串转换为小写
toUpperCase:将字符串转换为大写
split:分割字符串,可以把字符串分割成为真数组(参数是分隔符)
trim:返回一个从两头去掉空白字符的字符串,并不影响原字符本身
trimStart-trimLeft
trimEnd-trimRight
substring和slice区别:
slice 取不到第二个参数,位置可以是负数
substring取不到第二个参数,位置不可以是负数;参数位置可以调换
6.6 Math对象
提供了一系列与数学相关的成员
常量:永远不会变化的数据,常量一般命名时所有字母大写,如果有单词时,用下划线隔开
random方法:产生一个[0,1)之间的伪随机数(有规律的)
PI属性:圆周率
abs属性:求绝对值
ceil方法:对一个数向上取整
floor方法:对一个数向下取整
max方法:得到一组数字的最大值;如果max无参,得到-Infinity
min方法:得到一组数字的最小值;如果min无参,得到Infinity
pow:求一个数字的幂
round:得到一个四舍五入的整数,当小数部分为0.5时,舍入到+∞的方向
Date构造器
年(year)
月(month)
日(date)
小时(hour)
分钟(minute)
秒(second)
毫秒(millsencond,ms) = 1000μs
微秒(microsencd,μs) = 1000ns
纳秒(nanosecond)
世界划分为24个时区,北京在东8区,格林威治(一个地方)在0时区(根据地球的自转和太阳的公转计算而得的,也就是太阳时,可以精确到ms)
GMT:GREenwish Mean Time格林威治世界时
UTC:Universal Time Coodinated世界协调时,以原子时间为计时标准,精确到ns
UTC和GMT误差不超过0.9秒,开发的时候用的是UTC
GMT + 0800 东八区 +表示东边 -号表示西边
数字
1970 - 1 - 1 凌晨到 某个时间 所经过的ms数
1971年unix 32操作系统产生,系统内部内存太少,用时间戳(数字)来表示时间, 32位二进制大概在68年后(2038)就无法存储了–归0;
但是现在的操作系统是64位的,不要担心,64位可以存储2000亿年
直接调用函数(不用new),忽略所有的参数,直接返回当前时间的字符串;
new Date():创建日期对象
注意:月份的数字从0开始计算。
如果缺失参数,日期部分默认为1,时分秒毫秒默认为0。
月、日、时、分、秒、毫秒,均可以传递负数,如果传递负数,会根据指定日期进行计算(推迟计算)
查看Date MDN
getDate方法:得到日期部分
getDay方法:得到星期几,0表示星期天
getFullYear方法:得到年份
getHours方法:得到小时部分
getMinutes方法:得到分钟部分
getSeconds方法:得到秒部分
getMilliseconds方法:得到毫秒部分
getTime方法:得到时间戳
getMonth方法:得到月,从0开始计算
setDate方法:设置日期
setMonth方法:设置月份
setFullYear方法:设置年
setMinutes方法
setSeconds方法
setMilliseconds方法
setTime方法:重新设置时间戳
toDateString方法:将日期部分转换为可读的字符串。
toISOString方法:将整个对象转换为ISO标准的字符串格式。
toLocaleDateString方法:根据当前系统的地区设置,将日期部分转换为可读的字符串
toLocaleString方法:根据当前系统的地区设置,将整个日期对象转换为可读的字符串
toLocaleTimeString方法:根据当前系统的地区设置,将时间部分转换为可读的字符串
日期对象重写了Object中的valueof方法,返回的是一个数字,表示时间戳
因此,日期对象可以进行数字运算
作业
编写一个函数,用于返回一个友好的字符格式
给定用户的生日(年,月,日),计算该用户的年龄
根据系统当前的月份,输出这个月每一天的星期
2020年1月1日: 星期一
…
2020年1月30日:星期三
6.9 正则表达式
正则表达式是国际标准,跨越语言
正则表达式是一个规则,用于验证字符串;
百度 正则表达式菜鸟教程
规则中直接书写字面量
.:任意字符(除换行符)
^:开始
$:结束
\n:匹配换行
\r:匹配回车符(windows中的,Linux和ios中没有)
\t:制表符
\s:匹配任何空白字符(包含空格,回车,制表符,空格等)
\S:除了匹配任何空白字符其他都可以匹配
\b:匹配一个单词边界,即字与空格间的位置。----\bcat\b---匹配一个单词cat,两边是空格或换行,\b写在单词哪边就证明这边是单词边界
\B: 非单词边界匹配。写在单词哪边就证明哪边是单词非边界
\d:0-9的数字
\D:不是数字
\w:匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。
\W:
匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。
\u:unicode编码
转义符可以将特殊字符转义
[字符范围]:其中写入字符的规则
[^字符范围]: 对字符范围取反
匹配中文:[\u4e00 - \u9fa5]
\u9fef
前面的规则出现的次数
*:匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+:一个或多个
?:匹配0个或1个
.:匹配除换行符 \n \r之外的任何单字符。要匹配 . ,请使用 \. 。
{n}:匹配n个
{n,}:匹配>=n个
{n,m}:匹配n~m个
():标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
多个规则之间,使用或者|
,表示多个规则任选其一;
作业:在菜鸟教程正则表达式中直接测试
写一个正则表达式,匹配手机号
11位,第一位是1
^1\d{10}$
姓名必须是3-6位的中文
^[\u4e00-\u9fa5]{3,6}$
密码必须是6-12位的字符,只能包含数字、字母、下划线
^[\w]{6,12}$
写一个正则表达式,匹配邮箱
[email protected]
^\w+@\w+(\.\w+){1,2}$
匹配一个座机号
xxx-xxxxxxxx
前面:1-3个数字
后面:4-8个数字
^\d{1,3}-\d{4,8}$
匹配一个正数
^\d+(\.\d+)?$
匹配一个小数
^-?\d+\.\d+$
匹配一个整数
^-?\d+$
js中,正则表达式表现为一个对象,该对象是通过构造函数RegExp
查看RegExp MDN
var reg1 = /正则表达式规则/标志位;//需要全局搜索的话标志位写g---global,忽略大小写的话写i--ignorCase,多行匹配写m---multiline
//没有写m的话默认^就是字符串的开始,$就是字符串的结束,写了m之后^就是行的开始,$就是行的结束
var reg2 = new RegExp("正则表达式规则"或者变量, "标志位");
RegExp("规则"或者变量);
//区别
var reg2 = new RegExp(reg1);//reg1和reg2是不同的地址
var reg3 = RegExp(reg1);//reg1和reg3地址一样
//规则确定建议使用第一种,用户给我们提供的规则使用第二种
实例属性:
实例方法:
正则表达式,默认情况下,使用贪婪模式,比如1234用\d+匹配会得到1234,而不是1\2\3\4\12\34…
在量词后面加上?,开启非贪婪模式
搜素string MDN
实例方法:
作业:
var str = "2323hkdkjasabc12321fesdasafr3421df";
var reg = /[a-z]/g;
var count = 0;
var result;
while (result = reg.exec(str)) {
count++;
console.log(`匹配次数${count},匹配结果为${result[0]}`);
}
var str = "我13学习242Javascript语言我13学习242Javascript语言我13学习242Javascript语言";
var reg = /[\u4e00-\u9fa5]/g;
var count = 0;
while (result = reg.test(str)) {
count++;
}
console.log(count);
var str = "营销共产党,这是一个游戏,不能说too yong too simple,而且不能说共产党,因为这些都是敏感词";
var sensitve_arr = ["共产党","too yong too simple","营销"];
var reg = new RegExp(`${sensitve_arr.join("|")}+`, 'g');
str = str.replace(reg, "****");
console.log(str);
html.match('第'\d+'章').length
var html = `
第1章
Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi recusandae mollitia labore dolor a repudiandae rem officia culpa. Ipsum corporis vero blanditiis nam recusandae mollitia consectetur, illo fugit placeat numquam!
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam aliquam nobis commodi voluptas at ex, dolor eum tempora harum saepe itaque quae explicabo sint repudiandae molestiae incidunt quidem? Voluptatem, incidunt?
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Error, doloribus aliquid nobis explicabo assumenda ratione minima accusamus dignissimos perferendis in earum recusandae! Facere quas, explicabo facilis doloribus aperiam culpa esse!
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Tenetur adipisci officiis voluptate deleniti cum modi provident error, quas aspernatur fuga quae quam eius facere voluptatibus accusamus ullam perspiciatis rerum harum.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Temporibus ullam perspiciatis vero sunt enim ipsum, repellendus nesciunt, velit consequuntur illum veniam ea adipisci, saepe id at? Optio maiores est quam?
第2章
Sequi ex sed, consequatur eos incidunt, quasi tempora facilis aliquam harum, nemo aliquid minima? Possimus facilis, laborum ut reprehenderit aliquam, libero illo, cumque eum quos perferendis explicabo ratione blanditiis! Inventore?
Quasi, minima quam tempora magnam rerum, incidunt inventore ipsa ut impedit blanditiis temporibus esse sint fuga a necessitatibus eligendi sapiente non vitae quod iusto obcaecati? Similique numquam illo temporibus quis.
Maiores, fuga vel eum neque repellendus illo quidem culpa possimus earum quisquam, voluptatum quam sapiente libero quas, odio commodi optio? Nostrum laboriosam natus vitae in aspernatur sequi ab ipsum ipsam.
Dolor accusantium enim ipsum, similique atque numquam. Nemo excepturi, similique aperiam enim labore soluta animi, suscipit ad quibusdam hic molestias culpa natus nobis repudiandae velit numquam illum itaque magni. Doloremque.
Quis odit iste, beatae dolor commodi voluptatem rem maiores officiis atque accusantium consectetur magni. Sed tempora ipsum provident vel, fugit modi laborum quaerat nisi sit adipisci quidem debitis dolor vero.
第3章
Modi cumque ipsum veritatis quis ratione doloremque facilis iusto officiis labore odio velit pariatur quidem, iste, fuga aut amet quisquam dolorum eveniet ex nulla? Ut eaque officiis labore distinctio a!
Iste dolores ducimus sapiente rem, sed nesciunt nulla voluptatum quos labore cum modi eius at enim, ipsum repellat deserunt eaque, necessitatibus doloremque sint fugiat explicabo quaerat nisi perspiciatis. Sapiente, optio.
Eaque in quae culpa minima possimus atque consequuntur, ducimus unde! Consectetur, labore nihil! Laboriosam perspiciatis provident, dolor suscipit fugit repudiandae hic nemo dolorum sit, nesciunt recusandae cupiditate. Dicta, repellat corrupti.
Vitae, blanditiis! Molestiae soluta at saepe nemo atque vero earum, magnam ducimus laudantium deleniti facere reiciendis commodi excepturi quisquam quibusdam. Officiis commodi nisi omnis ipsa repellendus earum eius deleniti sint.
Dignissimos, aliquam alias laboriosam beatae enim veritatis omnis ex autem fugit ratione. Eligendi nostrum id, adipisci maiores, aperiam alias tempore fugit natus cupiditate similique ipsam iure necessitatibus. Accusantium, vitae sapiente.
第4章
Facilis sit possimus debitis nesciunt veritatis sunt labore eveniet architecto numquam, quae perferendis corporis omnis ipsa nemo id similique vitae voluptas quis ut corrupti incidunt temporibus quam! Blanditiis, deleniti voluptatibus.
Esse ad necessitatibus cumque fuga nisi a vitae dolor? Corrupti harum adipisci officiis vitae accusamus, facilis dicta deserunt amet. Error unde, magnam sed provident harum architecto omnis officia voluptatibus aliquid.
Dicta quo nesciunt aspernatur consequatur magni explicabo dolorum laborum dolorem, consequuntur itaque ratione ad atque perferendis eaque vitae amet enim non reprehenderit autem sint minima! Quibusdam vitae corrupti iure quia.
Fuga nisi cum possimus repudiandae consectetur saepe fugit dolorum a expedita provident sequi sed in optio assumenda, asperiores voluptatem voluptates veniam repellendus id error nam atque earum. Ipsa, saepe earum.
Aliquid laboriosam totam molestiae dicta dignissimos nostrum molestias quaerat, vel, alias quae nulla, voluptate est facilis quas! Perferendis, repellat perspiciatis nesciunt fuga porro non? Non labore maiores asperiores architecto ad!
第5章
Itaque dignissimos id nesciunt animi ipsam, repellendus earum possimus, voluptas vitae provident tempora reiciendis delectus ratione dolorum. Expedita laudantium sed magni dignissimos aliquam quo maiores reiciendis, repellendus quaerat debitis facilis.
Repellendus magni vel dignissimos, similique consequatur consectetur, deleniti est quia odio quisquam eveniet eius culpa quae doloremque reiciendis. Dicta magni qui reprehenderit praesentium consequatur placeat laborum sunt autem quam hic.
Perspiciatis sit quisquam expedita excepturi minima eum suscipit odio eveniet velit similique facilis laborum doloribus cupiditate, incidunt consequuntur ratione nam commodi quaerat? Impedit, totam reiciendis vero rem dicta provident quaerat!
Beatae id facilis corrupti a ipsam? Laborum quis eveniet rerum placeat unde aliquam nam recusandae labore quibusdam officiis blanditiis magni ab, non enim maxime, ad error sapiente. Aut, perferendis soluta.
Nulla, esse corrupti! Labore repellat aspernatur, quisquam, saepe minus alias tempora debitis aut reiciendis optio id dolor provident soluta perferendis. Doloribus dolor nisi nam modi vel qui aspernatur voluptatibus eos.
第6章
Voluptatem magni ab iusto amet fuga illum dolor, iste suscipit, natus molestias cum, rem beatae animi maxime doloribus vitae non praesentium. Provident, accusantium fuga iste tempore vel molestias quasi dolor?
Impedit consequuntur quisquam voluptates iure nemo fugit veniam perspiciatis adipisci laboriosam reprehenderit quod pariatur molestiae, illum earum recusandae iusto nam aperiam fugiat? Voluptatem nihil temporibus eum vitae, nesciunt debitis ipsum.
Eveniet tempora, delectus minima atque ratione eligendi, distinctio earum id animi reprehenderit itaque suscipit corporis voluptate at! Atque esse, quas dicta facere modi vero quisquam amet illum molestias ipsam nemo.
Maxime quisquam est dolorem distinctio quos nobis culpa magnam, hic qui reprehenderit officia voluptatem sint quo! Maxime aperiam eligendi, modi doloribus ad, aspernatur voluptates porro perspiciatis amet odit eaque eveniet!
Tempore aliquid, vero iure, nisi dicta eius in perspiciatis voluptates totam unde rem exercitationem neque omnis porro quibusdam delectus maiores, a eaque! Eveniet, aspernatur libero! Laborum tempora molestiae dolorum commodi!
第7章
Doloribus nihil quaerat aliquam laborum modi ab itaque accusamus quidem tempora odit reiciendis ipsum, praesentium labore. Tempore, repudiandae quisquam. Tempore rerum ex tenetur a dolore ab aliquid quaerat quod ipsa.
Esse laboriosam magni libero nobis sunt unde minima nemo et id! Doloribus, vero in blanditiis eveniet voluptatum ad ducimus officiis omnis quisquam possimus libero eligendi tenetur quibusdam impedit, necessitatibus voluptate?
In, tempora. Sit quasi a, iusto nemo deserunt sunt ab non debitis maiores, molestias modi aspernatur magnam libero qui, fuga velit ullam ex earum soluta recusandae! Repellendus repellat delectus molestias!
Iste velit maiores, nostrum molestias quisquam, voluptatibus veritatis voluptates totam nisi omnis, vero ullam a nam. Pariatur quia et, temporibus eius qui magni magnam, saepe modi impedit delectus sit? Saepe!
Magni nisi earum a laborum cumque, omnis hic ipsa nesciunt recusandae ipsum necessitatibus assumenda repudiandae, consequatur sunt ea harum reprehenderit perferendis nulla voluptates iste, velit labore ipsam vitae officiis? Quis.
第8章
Asperiores hic molestias quos sunt ex quo magni explicabo ipsum quod officiis fuga veritatis quidem dolor, expedita, saepe a itaque veniam porro, dolores amet harum architecto tenetur. Officiis, sit laudantium.
Ad nesciunt minus asperiores culpa fugiat repellat delectus dolores molestias ipsa cum vitae beatae, unde mollitia aspernatur soluta perferendis quidem dolore odio necessitatibus. Libero ipsam suscipit quaerat quisquam architecto dignissimos.
Minima ex doloremque eos aspernatur qui? Nobis, reiciendis. Laboriosam error incidunt sequi rerum repellat ex vero reprehenderit dolore necessitatibus earum fuga labore quaerat quia, obcaecati, magni autem impedit et explicabo.
Expedita modi rem ab. Nemo harum odio, commodi reprehenderit quis eius eveniet nobis iste nihil fuga molestias voluptatem explicabo natus fugiat assumenda deserunt architecto impedit dignissimos, quaerat vel. Expedita, quo!
Dolorem, aliquam et quos illum sequi molestiae quaerat modi? Magnam unde accusamus itaque nesciunt labore sunt iure animi quisquam possimus repudiandae rerum nostrum fugit autem dolorum, quasi tempora, sed ipsa?
第9章
Voluptatum error nisi autem voluptatem at odit illum iste! Eius natus exercitationem qui? Provident corrupti accusantium enim quidem minima perspiciatis voluptatem autem ducimus, consequatur officia optio dolorem quis doloribus possimus!
Excepturi neque libero rerum, obcaecati voluptates repudiandae blanditiis cumque eos commodi magni, quisquam tenetur saepe officia temporibus! Aspernatur, corrupti omnis magnam molestias eveniet velit, aut, atque fuga voluptatibus quasi excepturi!
Quae dolor adipisci molestias accusamus assumenda consequatur voluptatibus consequuntur aperiam quis perferendis recusandae culpa aspernatur esse nemo labore minima est eos neque suscipit vitae repudiandae, voluptates deserunt? Minus, officia cumque.
Harum deserunt soluta amet odit facilis itaque iste provident! Temporibus consequatur accusamus rerum sit iusto atque eaque facilis, recusandae sequi commodi cumque odit molestias sed necessitatibus id est exercitationem quidem.
Provident est, natus eos eligendi incidunt quas adipisci cum accusamus quia asperiores possimus ab nesciunt dolor. Qui, autem a velit aliquid quasi fugit corrupti in iusto corporis provident iste voluptatum!
第10章
Esse aperiam id possimus repellendus dignissimos sint voluptates. Deleniti eum excepturi facere explicabo sapiente iste voluptas laborum, incidunt aspernatur, voluptatum reprehenderit similique odit nam adipisci! Dolorem impedit minus optio provident.
Facere deserunt soluta neque temporibus cupiditate repellat quidem veniam, ipsam debitis, excepturi dolores unde, libero alias earum nemo aliquam. Officia repellendus, commodi illum ea voluptate animi consequuntur. Consectetur, similique asperiores.
Vitae nostrum magni nam pariatur voluptatibus! Dignissimos quia delectus temporibus incidunt molestias vitae commodi quis ipsam reprehenderit corporis doloribus recusandae excepturi dolorum atque, architecto iste mollitia ea nemo asperiores natus.
Provident ipsum rem accusamus nam, debitis explicabo sint perferendis? Ad, voluptatem possimus aspernatur expedita alias laudantium libero vero distinctio ea itaque quaerat officia reiciendis obcaecati incidunt, asperiores esse iusto debitis.
Sunt nihil, aliquid ducimus aperiam placeat eveniet officia asperiores repudiandae beatae quae. A esse, dolore commodi et fugit distinctio ipsum perferendis, consectetur culpa illo nulla eius adipisci repellat laudantium quasi?
`;
var reg = /第\d章<\/h2>/g
;
var result = reg.exec(html);
if (result) {
console.log(result.length);
} else {
console.log(0);
}
用小括号包裹的部分叫做捕获组,捕获组会出现在匹配结果中,可以在exec方法里面查看
捕获组可以命名,叫做具名捕获组
在小括号一开始写 ?<名字> — 会以数组形式出现在exec的属性里
非捕获组
在小括号一开始写 ?: — 变成普通的括号,不会捕获括号里面的内容,捕获会浪费执行效率;
在正则表达式中,使用某个捕获组,
\捕获组编号
var reg = /(\d){2}\1/;//\1就是反向引用
var s = "1313";
console.log(reg.test(s));//true
//如果s = "1321";//则无法匹配
面试题
var s = "aaaaaaabbbbbcccccdegfsssss";
//找出字符串中连续的字符
var reg = /(\w)\1+/g;
//具名捕获组,\k表示获取捕获组的名字
//var reg = /(?\w\k+)/g
while(result = reg.exec(s))
{
console.log(result[1];)
}
检查某个字符后面的字符是否满足某个规则,该规则不成为匹配结果,并且不成为捕获组
var s = "adef28jif99dhiwje0";
var reg = /[A-z](?=\d)/g;//?=是正向预查,不是捕获组
//得到后面有数字的字母
面试题
var s = "2181012371801921";
// var result = "2,181,012,371,801,921";
var reg = /\B(?=(\d{3})+$)g/;
s = s.replace(reg, ",");
console.log(s);
与正向预查正好相反 符号是?!
检查某个字符后面的字符是否不满足某个规则,该规则不成为匹配结果,并且不成为捕获组
//判断密码强度
//要求密码中必须出现小写字母、大写字母、数字、特殊字符(!@#$%^&*_,.) 6-12位
var s = "24ejioqw27AH@";
var reg = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[\d])(?=.*[!@#$%^&*_,.]).{6,12}$/;
console.log(reg.test(s));//true
//判断密码强度 6-12位
//出现小写字母、大写字母、数字、特殊字符(!@#$%^&*_,.)--->强
//出现小写字母、大写字母、数字-->中
//出现小写字母、大写字母--->轻
//其他--不满足要求
function judge(pwd) {
if (/^(?=.*[a-z])(?=.*[A-Z])(?=.*[\d])(?=.*[!@#$%^&*_,.]).{6,12}$/.test(pwd)) {
return "强";
} else if (/^(?=.*[a-z])(?=.*[A-Z])(?=.*[\d]).{6,12}$/.test(pwd)) {
return "中";
} else if (/^(?=.*[a-z])(?=.*[A-Z]).{6,12}$/.test(pwd)) {
return "轻";
} else {
return "不满足要求";
}
}
6.10错误处理
查看Error MDN
JS中的错误分为:
控制台打印
断点调试
错误在js中本质上是一个对象,抛出错误的语法为:
throw 错误对象;
错误对象的构造函数为Error(参数是一个字符串)
错误堆栈(先进栈的后出栈)–全局环境–浏览器
try{
//代码块1,这里如果有throw了错误对象,这个错误对象会以实参传递给catch的形参
}
catch(错误对象){
//代码块2
}
finally{
//代码块3
}
// catch和finally都可以被省略,如果两者都省略了,try发生错误和throw一样
当catch有返回值时,这个函数返回值是catch,当finally也有返回值时,finally的返回值会覆盖catch的返回值
当运行代码1的时候,如果发生错误,立即停止代码1的执行,转而执行代码2,错误对象为抛出的错误对象。无论代码1和代码2是否执行完成,最终都将执行代码3