JS正则表达式

关键词:正则表达式、转义、量词、修饰词、贪婪与惰性、子项、字符集、捕获组、断言

总得来说,理解正则表达式大部分都是要靠背的,背的好自然用的就顺手。

文章结合实际代码展开讲解:

/*
    正则表达式:本身是一个对象,用于对字符串进行操作
*/ 
// 正则表达式的两种声明方式
// 直接//给定规则
let reg1=/hello/
let s='hello world';
console.log(reg1.test(s));//true
// 通过某个字符串变量制定正则规则
let s1='hello';
let reg2=new RegExp(s1);
console.log(reg2.test(s1));//true

/*
    正则表达式常用方法:test方法、match方法
*/ 
// test方法返回布尔值,若目标字符串存在给定规则返回true,反之false
// match方法匹配成功返回数据,失败返回null
let s2='hello1 hello2 hello3';
console.log(s2.match(/hello/));

/*
    正则表达式匹配规则:
    \d:匹配数字
    \D:非数字
    \s:匹配空格
    \S:匹配非空格
    \w:匹配字符(数字、字母、下划线)
    \W:匹配非字符
    \b:单词边界(开始位置、结束位置、所有的非字符也就是\W)
    \B:非单词边界
*/
let s3='Tom 123';
let r3=/\d/;
console.log(s3.match(r3));//1
s3='Bobby is a good boy';
r3=/Bob/;
console.log(r3.test(s3));//true(由于Bobby中包含Bob正则表达式只是单纯的从中寻找符合规则的字符串所以返回true)
//此时需修改为
r3=/\bBob\b/;
console.log(r3.test(s3));//false(Bobby里面的Bob不作为单个单词出现所以false)


/*
    正则表达式修饰词:
    i:匹配不区分大小写
    g:全局匹配
    m:换行匹配

*/ 
// 不区分大小写匹配
let s5='Hello World';
let r5=/hello/i;
console.log(s5.match(r5));//Hello
// 全局匹配
let s6='jim 123 Tom 226 susan 777';
let r6=/\d+/g;//匹配所有的数据
console.log(s6.match(r6));//["123", "226", "777"]
    /*
    正则表达式量词规则:
    {n}:匹配n个
    {m,n}:最少m个最多n个
    {m,}:最少m个,最大无限制

    特殊量词:
    {1,} 等价于 +  表示匹配1个或多个
    {0,} 等价于 *  表示匹配0个或多个
    {0,1} 等价于 ? 表示匹配0个或1个  
*/ 

let s7='巍巍高山 洋洋江河';
let r7=/巍巍兮?高山/;
console.log(s7.match(r7));

// 正则表达式默认贪婪,加?使其变得惰性
let r4=/23{2,5}/ 
let s4='2333333';
console.log(s4.match(r4));//233333(默认贪婪,匹配5个)
r4=/23{2,5}?/
console.log(s4.match(r4));//233(只匹配2个)

//子项()
let s8='abcabcabcnonono你好';
let r8=/(abc)+(no)+/;
console.log(s8.match(r8));//匹配到的数据 子项1,子项2...
// 最近一次子项匹配的结果会存储到RegExp里面
console.dir(RegExp);
console.dir(RegExp.$1);
/*
    正则表达式其他字符 . | ^ $
*/ 
// .匹配任意字符(除了\n \r)
let s9='gray grey';
let r9=/gr.y/g;
console.log(s9.match(r9));
// ^匹配字符且是起始位置
let s10='gray gray';
let r10=/^gray/g;
console.log(s10.match(r10));
// $匹配字符且是结束位置
let s11='gray gray';
let r11=/gray$/g;
console.log(s11.match(r11));
// | 整个或 前后不重叠
let s12='abcd';
let r12=/abc|d/g;
console.log(s12.match(r12));
// | 在子项里面
let s13='abcabd';
let r13=/ab(c|d)/g;//等价于ab[cd]
console.log(s13.match(r13));
    

/*
    字符集[]
    1.或者的意思
    2.-的写法
    很多在[]外面有特殊意义的字符在[]里面是没有特殊意义的
    正则表达里面的特殊字符有:/ \ * + ?  . | ^ $ ( ) { }  [ ]

*/
// - 表示范围从..到..的字符都可以匹配
let s14='abcde';
let r14=/[a-e]{5}/;
console.log(s14.match(r14));//abcde
//[ab]:a或b
let s15='be';
let r15=/[ab]e/;
console.log(r15.test(s15));//true

/*
    捕获组\1:
    对子项的重复
*/ 
        //子项()
        let str8='abcabcabcnonono你好';
        let r8=/(abc)+(no)+/;
        console.log(str8.match(r8));//匹配到的数据 子项1,子项2...
        // 最近一次子项匹配的结果会存储到RegExp里面
        console.dir(RegExp);
        console.dir(RegExp.$1);

 

JS正则表达式_第1张图片

正则表达里具有特殊含义的字符有:

/ \ * + ?  . | ^ $ ( ) { }  [ ]

 

你可能感兴趣的:(JavaScript,正则表达式)