JS中的正则表达式-01

98 阅读2分钟

前言

正则表达式(Regular expressions)是用于匹配字符串中的字符组合的模板。在JavaScript 中正则表达式也是对象(Object);正则表达式拥有 exec()test() 方法(在这里,方法、函数都指 function);正则表达式通常也会配合match(), matchAll(), replace(), replaceAll(), search()split() 方法使用。

正则表达式变量(或常量)的创建

可以通过两种方式创建:

  1. 使用字面量的方式,例如
const reg01 = /a/

(用于匹配字母'a'),通过这种方式创建的好处:代码执行效率会更高;

  1. 使用字符串的方式创建,例如 
const reg02 = new RegExp('一些')

(用于匹配文字 '一些' ),通过这种方式创建的好处:正则表达式的创建会更灵活,比如当你拿到了一个字符串变量 str 时,你不需要知道它的值是什么,也可以创建正则表达式 ;

let str = '一些'
// 使用字符串
const reg02 = new RegExp(str)

exec(str) 语法

exec 匹配字符串,返回带有 index 属性的数组
exec(str) 语法
参数:str 一个字符串
返回值:Array 一个数组,包含附加属性 { index, input, groups}

 {index:'匹配到在字符串的下标',
  input:'被匹配的字符串(即参数str)',
  groups:'命名的捕获组'} 

案例1

/** 创建正则表达式 */
// 使用字面量
const reg01 = /a/
let str = '一些'
// 使用字符串
const reg02 = new RegExp(str)

let str01 = 'There is a lesson somewhere here but I shall leave it to you to tease out.'
let str02 = '这里有一些可以学习的东西,但我把它留给你来探索。'

/** exec 匹配字符串,返回带有 index 属性的数组 */
let arr01 = reg01.exec(str01)
let arr02 = reg02.exec(str02)

// 输出匹配到的 index 
console.log(arr01.index); //  9
console.log(arr02.index); //  3

该案例中,字符串1的第一个字母 a 的下标为 9(下标从0开始数);字符串2的第一个匹配项 '一些' 下标为 3,打印结果为 9 3

特殊字符

在正则表达式中有一些特殊字符,使用 \ 开头,以及* [] + ? () {}等等,这类特殊字符具有特殊含义
比如边界类特殊字符

边界类特殊字符

边界类特殊字符主要有以下4个:

boundaries描述
/^ /以……开头
/ $/以……结尾
\B非单词边界
\b单词边界 (字母和空格之间)

test()语法

test(str)语法
参数str 待匹配的字符串
返回值Boolean 当字符串存在匹配项时为 true, 找不到匹配项时为 false

案例2

let str01 = 'black cyan plum',
  str02 = 'violet a white'
let str22 = '翡冷翠 冰霜银 鸢尾紫色',
  str33 = '紫色 银迹 黑羽'

// \B 表示非单词边界 \b 表示单词边界(字母和空格之间的边界)
const reg01 = /\Ba\B/
// /^ / 以……开头  / $/ 以……结尾
const reg02 = /紫色$/

// test 匹配字符串,如果存在匹配项,返回 true;否则返回 false
let b01 = reg01.test(str01)
let b02 = reg01.test(str02)
let b22 = reg02.test(str22)
let b33 = reg02.test(str33)

console.log(b01);  // true
console.log(b02);  // false
console.log(b22);  // true
console.log(b33);  // false

该案例中,/\Ba\B/ 表示匹配单词中的a,但既不是单词开头的a, 也不是单词结尾处的a,因此字符串 'violet a white' 中的 a 无法被匹配,而 cyan 中的 a 被匹配; /紫色$/ 表示匹配以 '紫色' 结尾的字符串,而 '紫色 银迹 黑羽' 以紫色开头,无法被匹配