正则小记

234 阅读1分钟

正则表达式是匹配模式,要么匹配字符,要么匹配位置

const reg = /[^abc][def]g{2,5}\da?/g(修饰符)

修饰符:i,g,m

  • i表示的含义是忽略大小写进行匹配
  • g表示全局匹配,即匹配到第一个之后不停止继续匹配
  • m表示多行匹配即,遇到换行后不停止匹配继续直到被匹配字符串结束

方法

  1. 对于正则表达式
    • regObj.test(str) :测试某个字符串是否与正则匹配,匹配就返回true
    • regObj.exec:返回匹配的第一个字符串的信息(index,str,group)
    • regObj.compile
  2. 对于字符串
    • str.search(reg) : 查找第一次匹配的子字符串的位置,如果找到就返回一个number类型的index值,否则返回-1
    • str.match(reg) : 返回匹配的字符串
    • str.replace()
    • str.split()

正题

横向模糊搜索

  • var regex = /ab{2,5}c/g : g,它是正则的一个修饰符。表示全局匹配,即在目标字符串中按顺序找到满足匹配模式的所有子串

纵向模糊搜索

  • var regex = /a[bcd]e/g

字符组:需要强调的是,虽叫字符组(字符类),但只是其中一个字符。例如[abc],表示匹配一个字符,它可以是“a”、“b”、“c”之一。

  1. 范围表示法 : 如[123456abcdefGHIJKLM],可以写成[1-6a-fG-M]
  2. 排除字符组 : [^abc]表示是一个除"a"、"b"、"c"之外的任意一个字符,但是在括号外表示开始位置,$表示结束
  3. 常见简写:
    • \d 就是[0-9]。表示是一位数字。记忆方式:其英文是digit(数字)
    • \D 就是[^0-9]。表示除数字外的任意字符
    • \w 就是[0-9a-zA-Z_]。表示数字、大小写字母和下划线。记忆方式:w是word的简写,也称单词字符
    • \W 就是[^0-9a-zA-Z_]。非单词字符
    • \s 就是[ \t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。记忆方式:s是space character的首字母
    • \S 就是[^ \t\v\n\r\f]。 非空白符
    • . 就是[^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符除外。记忆方式:想想省略号...中的每个点,都可以理解成占位符,表示任何类似的东西

量词

  1. 简写形式

    • {m,} 表示至少出现m次
    • {m} 等价于{m,m},表示出现m次
    • ? 等价于{0,1},表示出现或者不出现。记忆方式:问号的意思表示,有吗?
    • + 等价于{1,},表示出现至少一次。记忆方式:加号是追加的意思,得先有一个,然后才考虑追加
    • * 等价于{0,},表示出现任意次,有可能不出现。记忆方式:看看天上的星星,可能一颗没有,可能零散有几颗,可能数也数不过来
  2. 贪婪匹配和惰性匹配

    • 其是贪婪的
    var regex = /\d{2,5}/g;
    var string = "123 1234 12345 123456";
    console.log( string.match(regex) ); // ["123", "1234", "12345", "12345"]
    
    • /\d{2,5}?/表示,虽然2到5次都行,当2个就够的时候,就不在往下尝试了
  3. 多选分支

    • 多选分支可以支持多个子模式任选其一
    var regex = /good|nice/g;
    var string = "good idea, nice try.";
    console.log( string.match(regex) ); // ["good", "nice"]
    
    • 分支结构也是惰性的,即当前面的匹配上了,后面的就不再尝试了
  4. 关于$1

  • ([a-z]+)([/u4396-/u4993]+):$1就是第一个括号匹配的内容的简写