正则表达式

it2023-03-07  83

正则表达式是一个描述字符模式的对象。

闭包

闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁,函数套函数。

包装器函数

1)Number() :Number.prototype.xxx 2)String() : String.prototype.xxx 3)Boolean():Boolean.prototype.xxx

var str="hello"; //string

console.log(str.length);

//1.new String(str) object String 自动装箱 2.new string(str).length 通过实例对象调用方法3.str-->string 自动拆箱

var num=10;

console.log(num.toString());

console.log(num.toString());

new Number():包装器函数/构造函数

var a=new Number(); a:object

Number():转换函数

var a=Number(); a:number

String.prototype.xxx: string的构造函数原型对象的方法,每个字符串都可以调用

1.length:返回字符串长度2.charAt(index):返回index位置的字符(下标) 3.charCodeAt(index):返回index位置对应的字符编码ASCII码 4.concat():字符串拼接 同+""效果相同 5.slice():字符串的截取

0:返回一个原字符串的复制字符串,不影响原字符串

1:从index开始截取,到字符串末尾结束

2:begin end 从begin开始结束到end结束,不包含end ,-1代表最后一个字符

6.substr:字符串截取

0:返回一个原字符串的复制字符串,不影响原字符串

1:从index开始截取,到字符串末尾结束

2:begin num 从begin开始截取,截取num个字符

7.substring:字符串截取 同slice相像

0:返回一个原字符串的复制字符串,不影响原字符串

1:从index开始截取,到字符串末尾结束

2:begin end 从begin开始结束到end结束,不包含end,当end为负数时,改变截取方向

8.indexOf():indexOf():全等比较,查找数组元素,默认从前向后查找,只找一个元素,对于找到的元素,返回元素的下标;对于找不到的元素,返回-1. 9.lastindexOf():查找数组元素,从后向前查找 10.trim():去掉字符串的前后空格,没有参数 11.toLowerCase():将字符串转换为小写 12.toUpperCase():将字符串转换为大写 13.search():搜索字符串 参数为字符串/正则表达式 找到返回下标,没找到返回-1,只能找到一个 14.replace(匹配字符串/正则表达式,插入的值):替换字符串 15.match():匹配字符串 参数字符串、正则表达式 匹配成功,返回一个匹配成功的字符串;匹配失败,返回null 16.split():分割字符,将分割后的字符组成一个数组:将字符串转换为数组

正则表达式

1.创建方式

1) 正则表达式字面量var pattern = /s$/;2) RegExp()构造函数var pattern = new RegExp("s$");

2.修饰符

g global全局 例如var p1=/hello/g; RegExp("hello","g");

i ignore case不区分大小写

m multiline多行

3.字符类

[xyz]一个字符集合,也叫字符组。匹配集合中的任意一个字符。你可以使用连字符‘-’指定一个范围。[0-9][a-z]

[^xyz]一个反义或补充字符集,也叫反义字符组。也就是说,它匹配任意不在括号内的字符。你也可以通过使用连字符'-'指定一个范围内的字符。必须在中括号里面添加^,在中括号外添加^,是以某一字符开头。

4.数量词 一定要用到子表达式之后

例如 var p1=/ \d{1,5} /g; 匹配数字,最少一次,最多5次

5.重复方式

贪婪 匹配重复字符时是尽可能多的匹配,默认{1,4}

非贪婪 匹配重复字符时是尽可能少地匹配,在待匹配的字符数量词后跟随一个问号即可

例如:{1,4}?

/a+/可以匹配一个或者多个连续的字母a,当使用“aaa”作为匹配字符串时正则表达式会匹配它的三个字符。

/a+?/可以匹配一个或者多个连续的字母a,但是尽可能少地匹配。只能匹配第一个a

6.选择

使用字符 "|" 分割供选择的字符。选择项的尝试匹配次序是从左到右,直到发现了匹配项,如果左边的选择项匹配,就忽略右边的匹配项,即使它产生更好的匹配。/ab|cd|ef/ 可以匹配 "ab"或者"cd"或者"ef"

7.分组

"()"作用:把单独的项组合成子表达式 以便可以像处理一个单元那样用"|""*""+""?"对单元内的项进行处理。

8.边界

9.原型属性

exec: 校验字符串是否有符合条件的字符串,如果有,返回数组,数组中存放的是符合条件的字符串,如果没有,返回null 例: var pattern = /abc/gim; var str = 'ababc acd abcd wee'; console.log(pattern.exec(str)); //['abc',index:2,input:'ababc acd abcd wee',groups:undefined] console.log(pattern.lastIndex); //5 也就是下一次检索位置从5号开始 没有g的情况下每一次都从0开始 str中有两个abc,怎么样可以拿到两个abc? 前提有g修饰符,且调用两次exec,没有g的话每一次都会从0开始查找 var pattern = /abc(d|e)/img; var str = 'ababcs acb abcd weeabce abss' console.log(pattern.exec(str)); // ['abcd'] console.log(pattern.exec(str)); // ['abce'] 循环调用exec方法,直到exec()==null就可以结束循环了 如果想拿到abcd abce放在一个数组中,怎么实现? var pattern = /abc(d|e)/img; var str = 'ababcs acb abcd weeabce abss' var result; // pattern执行exec方法的结果 var temp=[]; // 匹配到的字符串 记录 while(result=pattern.exec(str)){ //result取值可以是数组,可以是null //只要能进来循环体,那么result就是一个数组 temp.push(result); // tmp就是一个二维数组 [ [],[] ] } console.log(temp);

10.原型方法

test: 校验字符串是否符合正则表达式模式,返回true/false

exec: 校验字符串是否有符合条件的字符串,如果有,返回数组,数组中存放的是符合条件的字符串,如果没有,返回null

最新回复(0)