js正则表达式基础知识

333 阅读2分钟

创建与匹配

1.创建

  • 正则表达式的定义 严格校验大小写
    var reg_1 = /pattern/;                //第一种方法:
    var reg_2 = new RegExp('pattern');    //第二种方法:

2-1.正则表达式的exec方法

<script type="text/javascript">
    var reg = /test/;
    var str = 'testString';
    var result = reg.exec(str);
    alert(result);
</script>

将会输出test,因为正则表达式reg会匹配str(‘testString’)中的’test’子字符串,并且将其返回。

2-2.正则表达式的test方法

<script type="text/javascript">
    var reg = /test/;
    var str = 'testString';
    var result = reg.test(str);
    alert(result);
</script>

将会返回true(一个boolean值)

我们使用下面的方法做正则表达式的匹配:

function execReg(reg,str){
var result = reg.exec(str);
alert(result);
}

表达式匹配规则

  • c{n}

    /c{1}/只能匹配一个c

    /c{2}/匹配两个连续的c。

    /c{n}/匹配n个连续的c。

    /c{m,n}/表示匹配大于等于m,小于等于n个连续的c。

    /c{n,}/表示匹配大于等于n个连续的c。

示例:

reg = /c{1}/;
str='cainiao';
execReg(reg,str);

结果返回c;

reg = /c{2}/;
str='cainiao';
execReg(reg,str);

结果返回null,匹配失败;

    var reg = /c{3,5}/
    var str = 'ccccaaac'
    console.log(reg.exec(str));

结果返回cccc

  • 默认贪婪模式,即尽可能多的匹配

其他常用的正则表达式

  1. c* 大于等于0个连续的c 等与c{0,}
  2. c+ 大于等于1个连续的c 等价于c{1,}
  3. c? 大于等于0个小于等于1个 满足0个就算成功,返回一个空字符串 c{0,1}
  4. ^c 以c开头的
  5. c$ 以c结尾
  6. . 表示的是除\n之外的所有的字符
  7. b|c 匹配b或者c
  8. \b边界

\b 匹配字符的边界,也就是它匹配的是一个位置,而不是一个真正的字符。此位置一侧是字符,另一侧是非字符或者字符串边界(开始或者结束位置)

  1. \B 非边界
  2. \d 数字 => [0-9]
  3. \D 非数字
  4. \w 字母和数字 => [A-Za-z0-9]
  5. \W 非字母和数字 => [^A-Za-z0-9]
  6. [abc] 匹配[]内的任意一个字符
  • [a-z]小写字母
  • [A-Z]大写字母
  • [0-9]数字
  • [a-zA-Z0-9]表示字母和数字
  1. ^ 在字符集合中表示的是非
  • [^a-z] 非小写字母
  • ^ [a-z]以小写字母开头
  • [^A-z] 非字母
  1. \n 换行
  2. \s 单个空格
  3. \S 非空格
  4. ()先判断括号内部的
<script>
    var reg = /a*/
    var str = 'abcdefaa'
    console.log(reg.exec(str))

    var reg = /c+/
    var str = 'Cxiaoccainiao'
    console.log(reg.exec(str));
    
    var reg = /c?/
    var str = 'acacs'
    console.log(reg.exec(str));
    
    reg = /^ccc/;
    str='cc维生素c';
    console.log(reg.exec(str))

    reg = /c$/;
    str='cc维生素';
    console.log(reg.exec(str))
    
    var reg = /^./
    var str = '\nxiaocainiao'
    console.log(reg.exec(str))

    reg = /^b|c.+/;
    str='aluebcidea';
    console.log(reg.exec(str))
    
    reg = /^(b|c).+/    //以b或c开头除去换行符以外尽可能多的匹配
    
    reg = /^[abc]/;
    str='sbbs.blueidea.com';
    console.log(reg.exec(str))
    
    reg = /\bc/;
    str='维生素c';
    console.log(reg.exec(str))
    
    reg = /\s.+/;
    str='This  is a test String.';
    console.log(reg.exec(str))
</script>    

注意:

  • 带有( )的正则表达式,( )内的正则表达式会被视作子表达式,其结果也会被输出
    reg = /(\w)(\w)\2\1/;
    str='woow';
    console.log(reg.exec(str))

    reg = /^(?:b|c).+/;
    str='bbs.blueidea.com';
    console.log(reg.exec(str))

    reg = /^(?:b|c)\1/;
    str='bbs.blueidea.com';
    console.log(reg.exec(str))
    
    // 要想匹配字符*,+,···,需要用\转义
    reg = /c*/ 
    reg1 = /c\*/ // 'c*'
  • ? 非贪婪 尽可能少的匹配
    //  a?? 第一个?表示的是数量{0,1} 第二个?表示 非贪婪
    var reg = /a??/;    //相当于a{0,1}?
    var str = 'aaaaaaaaavbhbj' // a
    var str = 'baaaaaaaaavbhbj' // ''
    console.log(reg.exec(str))