JS 正则表达式

134 阅读3分钟

一、创建方式

正则表达式是JS的复杂数据类型

  1. 字面量 var reg = /abc/
  2. 内置构造函数 var reg = new RegExp('abc')
  • 例如: <input type="text" id="mytext">
mytext.onblur  = function () {
            console.log(mytext.value) // 打印输入框内失去焦点的值
            console.log(reg.test(mytext.value)) //判断值是否符合正则表达
        }

二、元字符

  1. 基本元字符
  • 1.1 \d 一位数字(0~9)
var reg = /\d\d/  //两位相邻数字
console.log(reg.test('abc'))  //false
console.log(reg.test('122'))  //true
console.log(reg.test('1'))    //false
console.log(reg.test('1a2b')) //false
  • 1.2 \D 一位非数字
var reg = /\D/ //含一位非数字即可
console.log("abc") //true
console.log("123") //false
console.log("1")   //false
 var reg1 = /\Dk\D/ //非数字 k 非数字 相邻
console.log(reg1.test('aka'))  //true
console.log(reg1.test('123a')) //false
console.log(reg1.test('1'))    //false
  • 1.3 \s 一位空白内容(空格 缩进 换行)
var reg = /\s/
console.log(reg.test('ak a'))   //true  空格
console.log(reg.test('123\n4')) //false \n表示换行
console.log(reg.test('1'))      //false
console.log(reg.test('1    '))  //true  缩进
  • 1.4 \S 一位非空白内容(空格 缩进 换行)
var reg = /\S/
console.log(reg.test('ak  a'))  //true 注意:有一位非空白内容即可
console.log(reg.test('    '))   //false
console.log(reg.test('\n\n\n')) //false
console.log(reg.test('     '))  //false
  • 1.5 \w 字母 数字 下划线
var reg = /\w\w/  //两位相邻的字母 数字 下划线
console.log(reg.test('&*'))     //false
console.log(reg.test('123abc')) //true
console.log(reg.test('a'))      //false
console.log(reg.test('1'))      //false
console.log(reg.test('1-2'))    //false
console.log(reg.test('__'))     //true
  • 1.6 \W 非字母 数字 下划线
 var reg = /\W\W/  //两位相邻的非字母 数字 下划线
console.log(reg.test('&*'))     //true
console.log(reg.test('123abc')) //false
console.log(reg.test('a'))      //false
console.log(reg.test('1'))      //false
console.log(reg.test('=='))     //true
  • 1.7 . 任意内容(换行不算) 注意:都是一位!!!
var reg = /./  //含一位任意内容(换行不算)即可
console.log(reg6.test('%^#%#^'))  //true
console.log(reg6.test('bahjsd'))  //true
console.log(reg6.test('ba\ncd'))  //true  含‘一位’任意内容
console.log(reg6.test('\n\n'))    //false
  • 1.8 \ 转义字符
var reg = /\d\.\d/   
//格式:数字.数字,如果不写转义符\,会被默认为数字 任意内容 数字
console.log(reg.test('1.2'))       //true
console.log(reg.test('1a2'))       //false
var reg = /\d.\d/   
//格式:数字 任意内容(换行不算) 数字
console.log(reg.test('1.2'))       //true
console.log(reg.test('1a2'))       //true
  1. 边界符
  • 2.1 ^ 开头边界
var reg = /^\d/    //一位数字开头
console.log(reg.test('aab2'))  //false
console.log(reg.test('1ab2'))  //true
  • 2.2 $ 结尾边界
var reg = /\d$/    //一位数字结尾
console.log(reg.test('aab2'))  //true
console.log(reg.test('1abb'))  //false
  • 2.3 ^开头结束$
var reg = /^abc$/    //格式:相邻的 a开头 + b + c结尾 
console.log(reg.test('abc'))   //true
console.log(reg.test('dabc'))  //false
console.log(reg.test('abcc'))  //false
  1. 限定符
  • 3.1 * 0~多次
var reg = /\d*/    //一位数字出现0到多次
console.log(reg.test('abc'))   //true
console.log(reg.test('abc1'))  //true
console.log(reg.test('abc12')) //true
  • 3.2 + 1~多次
var reg = /\d+/    //一位数字出现1到多次
console.log(reg.test('abc'))    //false
console.log(reg.test('abc1'))   //true
console.log(reg.exec('abc126')) //exec捕获,捕获到数字126
  • 3.3 ? 0~1次
var reg = /\d?/    //一位数字是出现了0~1次即可
console.log(reg.test('abc'))   //true
console.log(reg.test('abc1'))  //true
console.log(reg.test('abc11')) //true
  • 3.4 {n} 指定次数
var reg = /\d{3}/    //数字是相邻的,出现了3次即可
console.log(reg.test('abc'))      //false
console.log(reg.test('abc1'))     //false
console.log(reg.test('abc112'))   //true
console.log(reg.test('abc1124'))  //true
console.log(reg.test('abc11a24')) //false  未相邻
  • 3.5 {n,} 最少n次
var reg = /\d{3,}/    //数字是相邻的,最少出现3次即可
console.log(reg.test('abc'))      //false
console.log(reg.test('abc1'))     //false
console.log(reg.test('abc112'))   //true
console.log(reg.test('abc1124'))  //true
console.log(reg.test('abc11a24')) //false  未相邻
  • 3.6 {n,m} 最少n次,最多m次
var reg = /\d{3,5}/    //只要包含相邻数字3~5次 就是true
console.log(reg.test('abc'))        //false
console.log(reg.test('abc1'))       //false
console.log(reg.test('abc112'))     //true
console.log(reg.test('abc1124'))    //true
console.log(reg.test('abc123456'))  //true 
console.log(reg.exec('abc123456'))  //捕获,12345
var reg2 = /abc{2}/     //包含abcc即可
console.log(reg2.test('abc'))            //false
console.log(reg2.test('decc'))           //false
console.log(reg2.test('23255cabcc1546')) //true
var reg3 = /^abc{2}$/   //a开头 b cc两次并且cc结尾
console.log(reg3.test("abcc"))
  1. 特殊符号
  • 4.1 () 整体
var reg = /^(abc){2}$/  //相邻 abc开头 abc结尾
console.log(reg.test('abcabc'))      //true
console.log(reg.test('abc12313abc')) //false
  • 4.2 | 或
var reg = /a|b/          //a或b出现一个就是对
var reg1 = /(abc|def)/   //abc 或 def出现一个即可
var reg2 = /abc|def/     //c 或 d 出现一个即可
console.log(reg.test('1a3'))    //true
console.log(reg.test('123'))    //false
console.log(reg.test('12b'))    //true
console.log(reg1.test('abcef')) //true
console.log(reg1.test('abdef')) //true
console.log(reg2.test('abc'))   //true
console.log(reg2.test('def'))   //true
console.log(reg2.test('ef'))    //false
  • 4.3 [] 表示写在 [] 里面的任意一个都行
var reg = /[abcdef]{3,5}/   //[]里面的出现3到5次即可
console.log(reg.test('xb'))      //false
console.log(reg.test('abcd'))    //true
console.log(reg.test('abxyz'))   //false
console.log(reg.test('abdxyz'))  //true
  • 4.4 [^]: 反字符集合, 表示写在 [^] 里面之外的任意一个都行
var reg = /[^abc]/    //只要有一个不在这个范围内就可以
console.log(reg.test('a'))    //false 
console.log(reg.test('e'))    //true 
console.log(reg.test('deg'))  //true
console.log(reg.test('abx'))  //true
console.log(reg.test('dbc'))  //true
  • 4.5 -: 范围, 比如 a-z 表示从字母 a 到字母 z 都可以
var reg = /[a-z]/    //a-z 任意一个都可以
console.log(reg.test('a')) //true
console.log(reg.test('af')) //true
console.log(reg.test('AS')) //false
  1. 重复元字符
  • 符号: \数字
  • \1 \2 \3
  • 含义:表示重复第n个小括号的内容,并且要求和小括号的内容完全一致
var reg = /^(abc|def)\1$/
console.log(reg.test('abcabc'))  //true
console.log(reg.test('defdef'))  //true
console.log(reg.test('defdef'))  //true
console.log(reg.test('defabc'))  //false
// 获取span标签或者p标签
var reg = /<(span|p)><\/\1>/
console.log(reg.test('<span></span>')) //true
console.log(reg.test('<p></p>'))       //true
console.log(reg.test('<div></div>'))   //false
  1. 标识符 书写在正则外面,用来描述整个正则表达式

             1. i
                 表示忽略大小写
             2. g
                 表示全局
    
var reg = /^[abcd]$/i   
console.log(reg.test('a')) //true
console.log(reg.test('A')) //true
console.log(reg.test('w')) //false