写点什么

正则表达式学习笔记(一)

作者:lxmoe
  • 2022-11-18
    辽宁
  • 本文字数:1222 字

    阅读完需:约 4 分钟

一种构成

正则表达式是由字符+元字符+修饰符构成的一种对象形式的工具。

字符

字符单独使用的情况下,常常用于一些固定的匹配,比如/abc/,可以在某字符串中匹配abc

元字符

单独使用字符串匹配单一,搭配元字符食用更佳,比如我像匹配多个字符,就需要用到元字符


比如集合元字符[]通过集合即[]的使用来规定一个字符范围达到匹配多个字符的效果,比如/[abc]/可以匹配 a,b,c 三个字符串


let reg = /[huy]/;let str = "abchg";let _str = "abyg";console.log(reg.test(str)); // trueconsole.log(reg.test(_str)); // true
复制代码


更多元字符可以查阅mdn文档正则表达式 - JavaScript | MDN (mozilla.org)

修饰符

修饰符是位于正则表达式外的结尾位置,用于指定匹配策略


let reg = /hogskin/i;let str = "HogSkin";console.log(reg.test(str)); // true
复制代码



除此之外修饰符可以叠加使用,在结尾直接添加需要的匹配策略即可


let reg = /hogskin/gi;let str = "HogSkinHogSkin";console.log(str.match(reg));[ 'HogSkin', 'HogSkin' ]
复制代码

关于修饰符 s

在正则中.圆点,可以匹配任意单个字符,如下


let reg = /a./;let str = "a_a_a";console.log(reg.test(str)); // true
复制代码


但是遇到行终止符就不会被匹配,比如\n\r


let reg = /a./;let str = "a\na\na";console.log(reg.test(str)); // false
复制代码


所以需要引入s修饰符,达到一个dotAll模式,即所有字符都匹配


let reg = /a./s;let str = "a\na\na";console.log(reg.test(str)); // true
复制代码

修饰符 y 与 g 的区别

yg都为全局匹配,但是y相对于g来讲多了一种^的特性即头部匹配,通过下面例子还凸显y的特性


let reg = /a/y;let str = "a_a_a";console.log(reg.exec(str)); // [ 'a', index: 0, input: 'a_a_a', groups: undefined ]console.log(reg.exec(str)); // null
复制代码


let reg = /a/g;let str = "a_a_a";console.log(reg.exec(str)); // [ 'a', index: 0, input: 'a_a_a', groups: undefined ]console.log(reg.exec(str)); // [ 'a', index: 2, input: 'a_a_a', groups: undefined ]console.log(reg.exec(str)); // [ 'a', index: 4, input: 'a_a_a', groups: undefined ]
复制代码


可以看到以y为修饰符的情况第二个 a 没有被匹配到,因为在匹配到第一个 a 后,字符串剩下的为_a_a,由于头部为_所以无法匹配,这就是yg的区别,如果将匹配正则改为a_


let reg = /a_/y;let str = "a_a_a";console.log(reg.exec(str)); // [ 'a_', index: 0, input: 'a_a_a', groups: undefined ]console.log(reg.exec(str)); // [ 'a_', index: 2, input: 'a_a_a', groups: undefined ]
复制代码

修饰符属性

正则对象属性中有一个flag属性,可以返回正则的修饰符


let reg = /a_/y;console.log(reg.flags); // y
复制代码

判断修饰符

还可以通过正则的属性判断是否包含y修饰符


let reg = /a_/y;console.log(reg.sticky); // true
复制代码


也可以对s修饰符进行判断,判断是否开启dotAll模式来判断是否使用了s修饰符


let reg = /a./s;console.log(reg.dotAll); // true
复制代码


发布于: 刚刚阅读数: 4
用户头像

lxmoe

关注

还未添加个人签名 2022-08-06 加入

还未添加个人简介

评论

发布
暂无评论
正则表达式学习笔记(一)_正则表达式_lxmoe_InfoQ写作社区