正则表达式

正则表达式

  • 在JavaScript中,正则表达式也是对象,是一种索引类型。
  • 使用一个正则表达式字面量是最简单的方式,两个/是正则表达式的定界符。
  • 语法:var reg = /abc/; 正则表达式字面量在脚本加载后编译。如果正则表达式是常量,则可以获得更好的性能。
  • 使用 RegExp 对象的构造函数:var re = new RegExp("abc")

相关正则方法

  • 字符串的方法:

    • split() 根据匹配字符串切割父字符串,返回一个数组
    • match() 使用正则表达式与字符串相比较,返回一个包含匹配结果的数组
    • search() 对正则表达式或指定字符串进行搜索,返回第一个出现的匹配项的下标。如果匹配不成功,返回 -1。
    • replace() 用正则表达式和字符串直接比较,然后用新的子串来替换被匹配的子串。
  • 正则表达式方法:

    • exec() 在目标字符串中执行一次正则匹配操作。不论有没有全局修饰符,都只会在找到第一个之后停止。如果匹配不到返回一个null。可以通过打点调用返回结果中的index属性,查看返回结果的开始下标。
    • 语法:正则表达式.exec(str)
let str = "aaabcccc";
let strArr = /abc/.exec(str);
* test()  检测字符串是否匹配正则表达式。返回一个布尔值。
 * 语法:`正则表达式.test(str)`
let str = "a  bc";
let regResult = /\s/.exec(str);

正则表达式的组成

  • 由一些普通字符和一些特殊字符(又叫元字符)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的意义。
  • 特殊字符:JavaScript中常用特殊字符有 () [] {} \ ^ $ | ? * + .
  • 如果想匹配这类字符IXUS用转义符号 \ 。
  • 预定义特殊字符:
    • \t /\t/ 制表符
    • \s /\s/ 空格
    • \n /\n/ 回车符
    • \f /\f/ 换页符
    • \b /\b/ 空格

字符集

  • 字符集使用 [] 表示的可能的字符的集合,集合内部可以排列多个匹配字符串的可能性,整个字符需要匹配的是字符串中的一个字符。多选一的效果。有一个满足就匹配成功。

  • 简单类:

    • 正则的多个字符对应一个字符,可以用[]把他们括起来,只要在[]内有一个满足匹配条件就匹配成功。
    • 例如:/[abc]/.test("erta") 表示只要包含abc三个字符的任意一个就匹配成功。
  • 范围类:

    • 如果匹配的东西过多,而且类型又相同,可以在中间加个横线。[a-z]、[0-9]、[A-Z]
    • 例如:/[0-9]/.test(""abc8) 表示匹配0-9之间的字符,包含0-9。
  • 负向类:

    • []前面加个元字符进行取反,表示匹配不能为括号里面的字符。取反。
  • 组合类:

    • 允许用中括号匹配不同类型的单个字符。[0-z]

修饰符

  • g 修饰符用于执行全局匹配,查找所有匹配而非在找到第一个匹配后停止。
    • "12z12b12c".match(/\d+/g) ==> ["12", "12", "12"]
  • i 修饰符用于执行对大小写不敏感的匹配。如果不配和g修饰符,表示匹配到第一个字符就停止匹配,可以配合g修饰符使用。
    • "12Ab".match(/[a-z]/gi) ==> ["A", "b"]

边界

  • ^ 表示以什么字符开头,如果在[]使用,表示取反。
    • /^a/.match("dfgabc")
  • $ 表示以什么字符结尾。

预定义类

  • . 除了换行和回车之外的任意字符
  • \d 数字字符
  • \D 非数字字符
  • \s 空白字符
  • \S 非空白字符
  • \w 单词字符,所有的字母、数字和下划线
  • \W 非单词字符

量词

  • {n} 硬性量词 对应零次或者n次
    • 示例:/^\d{5}$/.test("123456")
  • {n,m} 软性量词 至少出现n次但不超过m次,使用的时候中间不能有空格
    • 示例:/^\d{3,5}$/.test("123456")
  • {n,} 软性量词 至少出现n次
    • 示例:/^\d{3}$/.test("123456")
  • ? 软性量词 出现零次或者一次
    • 示例:/^\d?$/.test("1")
    •  软性量词  出现零次或多次
      
      • 示例:/^\d*$/.test("12345")
    •  软性量词  出现一次或者多次,至少出现一次
      
      • 示例:/^\d+$/.test("123")

分组

  • 如果想获取重复的多个字符,可以使用小括号进行分组。
  • 语法:/(abc){2}/.test("byebye")

或操作符

  • 可以使用竖线 | 字符表示或者的关系
  • 语法:
    • /a|bcd/.test("bcdsga") 匹配a或bcd字符
    • /(ab)+|(cd)+/ 匹配出现一次或多次的ab或者cd

分组的反向引用

  • 反向引用标识是对正则表达式中的匹配组捕获的子字符串进行编号,如果再表达式内进行引用,通过"\编号" 进行引用,如果在表达式外进行引用,则通过"$编号"进行引用。从1开始计数。

  • 示例:

    • /(bye)\1/.test("byebye") ==> true
    • /(bye)\1/.test("bye") ==> false
    • '123456'.replace(/(/d{3})*(/d{3})/, '2*1') ==> "456123"
    • '123*456'.replace(/(/d{3})*(/d{3})/, function(match, 1,2) {return 2 + "*" +1})

中文字符

  • 匹配中文:[\u4e00-\u9fa5]
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容