前端不求人系列 - 正则表达式的方法

434 阅读3分钟

每次写正则就去百度谷歌搜,搜到的可能还不是想要的,彻彻底底搞懂它,下次希望尽量能不借助搜索引擎,搞定它。

正则:用来描述规则的表达式,字符串模式匹配,为了搜索或替换

search,match,replace,split,test,exec 具体的用法,如下:

search: 查找与正则表达式相匹配的值,并返回其位置。

const reg = /\d/; // 正则表达式,匹配数字
const str = 'abcdef123sdf';
console.log(str.search(reg)); // 6 (从0开始的)

注意:

(1)、search() 方法不执行全局匹配,它将忽略标志 g。
(2)、search() 是从字符串的开始进行检索,并返回第一个被匹配对像检索的位置
(3)、如果没有检测到对象,则会返回 -1

match: 查找一个或多个与正规表达式匹配的值。

const reg = /\d/; // 正则表达式,匹配数字
const str = 'abcdef123sdf';
console.log(str.match(reg)); // ['1', index: 6, input: 'abcdef123sdf', groups: undefined]

如果加上g全局搜 /\d/g

那结果是: ['1', '2', '3']

注意:

(1)、match() 可以在字符串中,匹配一次或多次符合规则的文本,当然这主要看要匹配的正则表达式有没有标志 g

(2)、 没有/g (全局),那么 match() 方法就只会在被检索的字符串中执行一次匹配。如果没有匹配到则返回null,否则返回一个存放了与它找到的匹配文本有关的信息的数组。['1', index: 6, input: 'abcdef123sdf', groups: undefined]

返回来的数组组成:

  • 该数组的第 0 个元素存放的是匹配文本,
  • 而其余的元素存放的是与正则表达式的子表达式匹配的文本,除了这些常规的数组元素之外,
  • 返回的数组还含有两个对象属性。
  • index 属性声明的是匹配文本的起始字符在被匹配字符串中的位置,input 属性声明的是对被匹配字符串的引用。

(3)、如果匹规则有标志 g,则 match() 方法将执行全局检索,找到被匹配文本中的所有匹配的子字符串,并组成数组进行返回(数组中只有匹配到的子字符串,没有其它属性),如未匹配到,则返回 null.

replace: 替换与正则表达式匹配的值。

const reg = /\d/; // 正则表达式,匹配数字
const str = 'abcdef123sdf';
console.log(str.replace(reg, 'A')); // abcdefA23sdf

如果加上g全局搜 /\d/g

那结果是: abcdefAAAsdf

split: 将一串字符串分割成一个数组。

const reg = /\d/; // 正则表达式,匹配数字
const str = '5ab1cd5ef123sdf4';
console.log(str.split(reg)); // ['', 'ab', 'cd', 'ef', '', '', 'sdf', '']

test: 检测一个字符串是否匹配某个模式。

const reg = /\d/; // 正则表达式,匹配数字
const str = '5ab1cd5ef123sdf4';
console.log(reg.test(str)); // true

exec: 检测一个字符串内是否存在某个值,如有返回一个数组,如没返回null。

const reg = /\d/; // 正则表达式,匹配数字
const str = '5ab1cd5ef123sdf4';
console.log(reg.exec(str)); //  ['5', index: 0, input: '5ab1cd5ef123sdf4', groups: undefined]