正则分析

该章节主要结合具体使用列子,分析中高复杂度的正则表达式

提取字符串中用十六进制表示的色值

十六进制的色值表示方法有两种,分别是3位数和6位数,并以#开头,如:白色(#fff),黑色(#000000)

let regexp = /#([a-f0-9]{3}){1,2}\b/gi;
let str = "color: #3f3; background-color: #AA00ef; and: #abcd";
str.match(regexp); // #3f3 #AA00ef

解析

  • [a-f0-9],十六进制由0-9数字和a-f字母组成,其中字母

  • #十六进制的色值以#开头

  • ([a-f0-9]{3}){1,2},十六进制色值有3位和6位,其中{3}表示中括号中的字符出现3次,{1,2}表示圆弧括号中的3个字符重复1次或2次

  • \b,每个色值后跟随空格,标点符号等,进而可以使用\b表示一个单词的结束

  • gi,正则标志,全局匹配,不区分大小写

提取字符串中正数

提取内容包含正浮点数,正整数,排除0,负数

解析

  • [1-9],表示正数以1-9开头,一位数字

  • \d*,表示0-9数字出现0次或多次

  • (\.\d+)?,表示小数点可有可无

提取字符串中数字

数字包含负数,正数,整数,浮点数,以及0

解析

  • -?,表示匹配负数与正数

  • \d+,表示匹配0-9

  • (\.\d+)?,表示小数点可有可无

提取html标签名与class属性值

html标签结构为<h1 id="h1-id" class="h1-tag">The h1</h1>,其中h1为标签名,h1-tag为class名称,h1-id为标签id

解析

  • ([a-z\d]+),匹配标签名

  • [^>]*?,最小匹配非>字符,若没有最小匹配,则该模式也可以匹配class属性与值

  • class="([a-z\d-_]*)",匹配class属性值,注意该模式无法匹配多个class值的场景

  • [^>]*,尽可能多的匹配非>字符,以便达到标签结束位置

Last updated

Was this helpful?