正则表达式、


元字符

字面量正则表达式

? var reg=/a/gi;

? /正则表达式内容/修饰符

var reg=new RegExp("a","g");

var reg=new RegExp("正则表达式内容","修饰符")

修饰符

 g  全局匹配   查找到一个时没有完成继续向后查找
 i  不区分大小写 查找中不区分大小写
 m  多行查找
reg.exec(字符串)
  在字符串中查找是否包含该正则表达式内容,如果没有找到返回null,
  否则返回一个数组,数组中的第0项就是查找到内容,群组,查找到的下标,原字符串
  使用g全局匹配无效

reg.test(字符串)
    判断字符串是否有满足正则表达式的内容,如果有,则返回true,否则返回false

字符串可以使用正则表达式方法

match
一个在字符串中执行查找匹配的String方法,它返回一个数组,在未匹配到时会返回 null。
replace
一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
search
一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
split
一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的 String 方法。
元字符
 组成正则表达式的基本符号叫做元字符
 正常的元字符包含普通的字符和一些转义字符及特殊用途的符号

 当使用到一些字符符号与正则表达式中的符号冲突时,需要将其转换为字符符号作用不使用正则符号含义
 这时候需要使用转义字符,\符号  例如 \( \) \[ \] \{ \}  \\ \/ \^  \*  \. 

通配符

. 通配任意一个字符

test 和 exec都是这种情况,前提条件是同一个正则表达式

var reg=/a/;   
console.log(reg.exec("abac"));//0
console.log(reg.exec("abac"));//0
console.log(reg.exec("abac"));//0
var reg=/a/g;   如果使用了全局匹配,多次查找会在上次的基础上继续向后
console.log(reg.exec("abac"));//0
console.log(reg.exec("abac"));//2
            console.log(reg.exec("abac"));//null

每次都是新的正则表达式不会有上面的情况出现
console.log(/a/g.test("abac"))
console.log(/a/g.test("abac"))
console.log(/a/g.test("abac"))

[] []中的内容代表任意一个字符

[.] 就是. 不是通配符

字符类的反义 不要什么什么内容,取什么内容以外的东西

[^a] 匹配所有除了a以外的字符
[^.]  匹配除了.之外的所有字符
[^.^] 匹配除了.和^字符以外的其他字符
[^_^] 匹配除了_和^字符以外的其他字符
[^\^] 除了^以外的所有字符
[a-z^o] a-z^   当^出现的位置如果是[]的第一位,^恢复为^字符而不是反义

\w   [a-zA-Z0-9_]
\W   [^a-zA-Z0-9_]
\d   [0-9]
\D   [^0-9]
\s    空白字符
\S   除了空白字符以外的字符

重复

/a{3}/   a重复3次
/(ab){3}/  ab一共重复3次
/a{1}/   等同于a
/z{0}/   匹配空字符 ""   任意字符串中的"" 数量是字符串长度+1

重复范围

/a{1,5}/  最小几次到最大几次的重复
/a{0,5}/ 最小是最后一个空字符,最大是5个
/a{1,}/  当最大值不填写时,表示不设上限,最大无限,至少要有一个该字符
/a{0,}/  有没有这个字符都可以,也可以重复无限次
/a{0,1}/  有没有都可以

*  /a{0,}/  有没有都行,可以重复无限次
+  /a{1,}/  至少要有一个,可以重复无限次
?  /a{0,1}/  有没有都可以

非贪婪匹配

.*?
.+?
用在两个符号之间使用 .*? 或者.+? 可以获取到最近的这两个符号之间的内容

选择匹配

/ab|bc/
 /abc|bcd|def/
 /a|b/   /[ab]/
 /ab||bc/

 || 表示或者了一个""

^ $ 起始符和结束符

 起始和结束符,可以约束起始后或者结束前的内容,也可以约束整个字符串的长度

群组

()

当在正则表达式中使用群组()时,使用match不使用g的前提下,可以获取到被

查找到所有内容以外,还包括每个()群组内的字符独立列出

 str.replace(/\《.+?\》/g,function(被查找到的每一个内容,索引下标,原字符串){
            console.log(t,i,s)
        })

  str.replace(/\《(.+?)\》/g,function(被查找到的每一个内容,这个内容所包含的群组1,这个内容所包含的群组2,...,索引下标,原字符串){
console.log(t,$1,i,s)
        })

这里的$1 和 $2就是群组的变量
        str=str.replace(/^(\d{3})\d{4}(\d{4})$/,"$1****$2");

断言 基于群组的基础完成的判断

/内容(?=条件)/ 后置肯定断言

/内容(?!条件)/ 后置否定断言

/(?<=条件)内容/ 前置肯定断言

/(?

(内容)\1* 可以有不重复的

(内容)\1+ 至少重复一次以上的

断言模式

 1、必须定义变量
        x=3;
        console.log(x);
        变量名必须定义
2、不能使用同名参数
        Duplicate parameter name not allowed in this context
        function fn(a,a){
            console.log(a);
        }
        fn(3,5);
 3、不能使用with
        Strict mode code may not include a with statement
        严格模式下不能使用with
        var div=document.createElement("div");
        with(div.style){
            width="50px";
            height="50px";
            backgroundColor="red";
        }
        document.body.appendChild(div);
   4、不能对只读属性赋值,否则报错
        Cannot assign to read only property 'length' of string 'abcde'
        Cannot set property offsetLeft of # which has only a getter(获取)     setter(可以设置)
        var str="abcde";
        str.length=3;
 5、不能使用前缀0做8进制
        Octal literals are not allowed in strict mode.
        var a=056;
6、不能删除不可删除属性
        Cannot delete property 'length' of [object Array]
        var arr=[1,2,3];
        delete arr.length
 7、尽量不要使用eval,不要给eval和arguments赋值
 8、不使用arguments.callee,arguments.callee.caller
         'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
        arguments.callee 就是这个参数所在的当前函数
        arguments.callee.caller 回调当前函数的函数
9、严格模式中函数中的this被指向undefined
        function fn(){
            console.log(this);//严格模式中this被指向undefined
        }
        fn();
10、函数中多个参数使用
          function max(...arg){
            console.log(arg);
        }

        max(1,2,3,4,5);
11、当对象的属性名与变量名相同时,对象的属性值也等于变量值,直接把属性放在对象中就可以了
        var a=5;
        var b=6;
        // var obj={a:a,b:b}
        var obj={a,b};

let 和 const

let 定义变量,这个变量所在的作用域是块内

const 定义常量,常量定义后不可修改,名称使用全大写字母+_定义

相关