正则表达式基础

Author Avatar
FanShen 7月 14, 2018

创建正则表达式

构造函数

let reg = new RegExp("^[a-zA-Z]",'g');
let reg = new RegExp("/^[a-zA-Z]/,'g');

创建字面量

let reg = /^[a-zA-Z]/;

参数

g 全局匹配
i 匹配全部大小写
m 多行匹配
s 单行匹配

规则

. 任意字符
\d 0-9
\D 除\d外的字符
\w 0-9,a-z,A-Z,或者下划线
\W 除\w外的字符
\s 空格符,tab,换页或换行

范围

[…] 匹配字符范围之内的
[^…] 匹配字符范围以外的
^ 匹配以此开头的
$ 匹配以此结尾的

常用方法

  1. test()方法,检索字符串的值是否匹配给定规则,返回true或false
    /\d\d/.test('12');  //true
  1. exec()方法,检索字符串中的指定值,如果找到匹配的文本,返回一个结果数组,否则返回null
    /123/.exec('112123');  //["123",index: 3,input: "112123"]
  1. compile()方法,改变正则匹配的内容
    /123/.compile('456');  // /456/
  1. split()方法,将字符串分割为字符串数组
    "abcd".split(/b/);  // ["a","cd"]
  1. replace()方法,在字符串中用一些字符替换另一些字符
    "12345abcde".replace(/\d\d\d/g,'*');  //"*45abcde"
    "123  45".replace(/\s/g,'');  //"12345"
  1. search()方法,检索匹配的字符串,返回起始位置的索引
    "abcde".search(/c/); //2
    "abcde".search(/f/); //-1

常用匹配

  1. 13开头的手机号
/^(1)3{9}$/
  1. 某些号段的手机号验证
/^1(88|70|56)\d{8}$/
  1. 下划线和驼峰相互转换
// 驼峰转下划线,遇到大写字母时转化为小写字母,并在前面加上下划线,$1表示第一个字符串匹配
replace(/([A-Z])/g, '-$1').toLowerCase()
// 下划线转驼峰,\w表示下划线
replace(/\-(\w)/g, function(all, letter) {
    return letter.toUpperCase()
})