正则基础学习

目录

RegExp对象:

元字符:

        预定义类

边界

量词(匹配多次)

模式

分组

反向引用

前瞻:

RegExp对象属性


RegExp对象:

  字面量:let reg = /\bis\b/g
  构造函数方式:let regs = new RegExp('\\bis\\b', 'gi')第二个参数可以是g(全局),i(大小写),m(多行搜索)。也可以是组合形式详细见下方'RegExp对象属性'


元字符        正则表达式中有特俗含义的非字母字符(见下方)
原义文本字符  例如:我,你,a,b,c,1,2,3这样的标识匹配该字符


g        全局匹配
i        ignore case忽略大小写(默认大小写敏感)
m        多行搜索


元字符:

\t       水平制表符
\w       垂直制表符
\n       换行符
\r       回车符
\0       空字符
\f       换页符
\cx      与X对应的控制字符(ctrl+X)
[]       规定一类字符如[abc]表示匹配a或b或c为一类字符
^        创建反向类(取反的意思)如[^abc]表示不匹配a或b或c一类字符
[a-z]    范围类表示a-z的小写字符
[a-zA-Z] 匹配匹配所有大小写字母
[0-9-]   匹配0-9的数字以及数字之间的'-'连接符号如2020-09-09
         

        
预定义类

.         除了回车和换行之外所有字符
\d       所有数字[0-9]
\D       所有非数字[^0-9]
\s       空白符号(\t \w \n \r \0 \f)
\S       非空字符
\w       单字字符[a-zA-Z_0-9]
\W      非单字字符[^a-zA-Z_0-9]


边界

\b       单字边界(例如this 和 is没有边界this中的is也会被匹配)
\B       非单字边界
^        以XXX开始(^123以123开始)
$        以XXX结束(123$以123结束)


量词(匹配多次)

?        出现0次或1次(最多一次) /2?/g
+        出现一次或多次(至少一次) /2+/g
*        出现0次或多次(任意次数) /2*/g
{n}      出现n次 /2{3}/g
{n,m}    出现n-m次 /2{3, 5}/g
{n,}     至少出现n次 /2{3,}/g

模式

贪婪模式
  正则默认会尽可能多的匹配如:'12345678'.replace(/\d{3,6}/g, 'K') // K78
非贪婪模式
  在量词后加上?即可如:'12345678'.replace(/\d{3,6}?/g, 'K') // KK78


分组

()可以达到分组的效果如:a1b2c3d4.replace(/([a-z]\d){3}/g, 'K') // 某个组合连续出现3次
忽略分组:使用?:可以忽略分组(?:aaa)


或:a|b 表示a或b
非:!a 表示不为A


反向引用

  例如把年月日反向'2020-10-10'.replace(/(\d{4})-(\d{2})-(\d{2})/g, '$2-$3-$1') //10-10-2020
  其中这边的()分组是为了使用$来捕获分组


前瞻:

  正则默认从文本头部向尾部解析,向前检查是否符合规则
  如'a3*3'.replace(/\w(?=\d)/g, 'NNN') // NNN3*3 (?=\d)为前瞻判断匹配到的单字符串接下去是否为数字

后瞻:

  和前瞻相反
  如'1e1'.replace(/(?<=\d)\D/g, 'NNN') // 1NNN1 (?<=\d)为后瞻判断匹配到的单字符串前面是否为数字


RegExp对象属性

  global 全局搜索 default: fasle
  ignore case 忽略大小写 default: fasle
  multiline 多行搜索 default: fasle
  lastIndex 当前表达式匹配内容的最后一个字符的下一个位置
  source 正则表达式的文本字符串


正则表达式的方法
  test()
  exec()

const regexp = () => {
  let str = 'my name Is jiang, she is dell';
  let str1 = 'a1b2c3';
  let str2 = 'nambdc';
  let str3 = '1a2c2t3A2M3V1U2';
  let str4 = '1234ab2324';
  let str5 = 'this is a boy';
  let str6 = '@1234@sadasd@';
  let str7 = '1222222333333';
  let str8 = '12345678';
  let str9 = 'a1b2c3d4';
  let str10 = 'aaaabbbb';
  let str11 = '2020-10-10';
  let str12 = 'a2*3';
  let reg = /\bis\b/g;
  let reg1 = /[abc]/g;
  let reg2 = /[^abc]/g;
  let reg3 = /[a-zA-Z]/g;
  let reg4 = /ab\d./g;
  let reg5 = /\Bis\b/g;
  let reg6 = /^.@/g;
  let reg6_1 = /.@$/g;
  let reg7 = /2{3}/g;
  let reg8 = /\d{3,6}?/g;
  let reg9 = /([a-z]\d){3}/g;
  let reg10 = /(aa|bb)/g;
  let reg11 = /(\d{4})-(\d{2})-(\d{2})/g;
  let reg12 = /\w(?=\d)/g;
  let regs = new RegExp('\\bis\\b', 'gi');
  console.log(
    '正则匹配结果:', 
    str12.replace(reg12, 'NNN'),
    str.replace(regs, 'IS'),
    regs.source,
    regs.lastIndex,
    regs.global,
    regs.ignoreCase,
    regs.multiline,
    regs.test(str)
  );
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值