正则表达式

Posted on 2020-10-24 17:28  每天都在想着退休日子  阅读(92)  评论(0)    收藏  举报

先行断言

先行断言(?=表达式) 表达匹配表达式前面的位置

var str = 'I am siqang while u are reading';
    var reg = /\b\w+(?=\q)/g;
    console.log(str.match(reg)); //si
//表示匹配表达式q前面的字符

注意:先行断言的执行步骤是:先从要匹配的字符串中的最右端找到表达式第一个然后 再匹配其前面的表达式,若无法匹配则继续查找第二个ing 再匹配第二个 ing前面的字符串,若能匹配则匹配

后发断言(?<=表达式) 表示匹配表达式后面的位置

var str = 'I am siqang while u are reading';
    var reg = /(?<=\q)\w+/g;
    console.log(str.match(reg)); //ang
//表达匹配表达式q后面的字符

注意:后发断言跟先行断言恰恰相反 它的执行步骤是这样的:先从要匹配的字符串中的最左端找到第一个表达式,然后再匹配其后面的表达式,若无法匹配则继续查找第二个abc 再匹配第二个abc后面的字符串,若能匹配 则匹配

负向零宽断言

负向零宽先行断言(?!表达式) 表示后面跟的不是表达式的位置

var str = 'I am siqang while u are reading';
    var reg = /\b\w*\i(?!n)\w*\b/g;
    console.log(str.match(reg)); //siqang和while" 负向零宽先行断言 
    //表示匹配字符 i 后面不是字符 n 的位置

 

负向零宽后发断言为 (?<!表达式)  表示前面跟的不是表达式的位置

var str = 'I am siqang while u are reading';
    var reg = /\b\w*\i(?<!n)\w*\b/g;
    console.log(str.match(reg));//siqang和while和reading 负向零宽后发断言

主要看这两篇 https://www.iteye.com/blog/hooopo-407062

https://www.cnblogs.com/macq/p/6597366.html

注释

 (?#注释的内容)

 贪婪与懒惰

 

var greedy = 'Greedy can be dangerous at times'
    var reg1 = /a.*a/;
    console.log(greedy.match(reg1));

尽可能最长的从a匹配到最后一个a的字符串 贪婪性质    .*

var greedy = 'Greedy can be dangerous at times'
    var reg1 = /a.*?a/;
    console.log(greedy.match(reg1));

尽可能最短的从a到下一个a的字符串 懒惰特性  .*?

强推b站那个视频 15分钟速成正则表达式  适合新手看

?在正则表达式叫非贪婪模式

处理选项

IgonreCase 忽略大小写 (简写i):匹配时不区分大小写

Multiline 多行模式 (简写m):更改^和$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配\n之前的位置以及字符串结束前的位置.)

Singleline 单行模式 (简写s):更改 . 的含义,使它与每一个字符匹配(包括换行符\n)

IgonrePatternWhitespace 忽略空白:忽略表达式中的非转义空包并启用由#标记的注释

ExplicitCaptrue 显示捕获:仅捕获已被显示命名的组