美文网首页
正则表达式 regular expressions

正则表达式 regular expressions

作者: 欢西西西 | 来源:发表于2022-11-15 14:11 被阅读0次

1. 创建

  1. 创建固定的正则,可以直接使用字面量。如果要动态构建,需 new RegExp() 传入拼接的字符串

2. 一些规则

  1. ()既可以表示分组,又可以用来捕获。有些分组是不需要被捕获的,这会造成多出了一些无用的捕获。可以使用(?:),它可以仅分组,不捕获

  2. (a(bc)) ,括号嵌套表示 capture sub-group

  3. ^匹配起始(如果开启了匹配多行模式,也匹配每行的开始), $匹配结束

  4. [abc]表示单字或, (abc|cdf|fgb)表示多字或,[a-z]表示范围,但要表示 a-z,可以写成[az-]或者[a\-z]使它们不构成范围

  5. 反向引用: 使用\1 引用第一个捕获条件捕获到的字符串,相当于是动态的正则 例:/ad(\d{2})[陕甘宁]\1/可以匹配'ad23 陕 23' 'ad11 陕 11' 'ad90 甘 90';如果引用的是不存在的分组,那它表示的就是普通的转义

  6. 匹配任意字符 [\s\S]\* : \s 匹配空白字符, \S 匹配非空白字符

  7. [\w\W]\*? [\w\W]能匹配到换行呢;

  8. \w 匹配单词字符 [a-z][a-z][0-9], \W匹配非单词字符

  9. w:word ,d:digit ,s:space ,b:boundary ,r:return

  10. \r \n 回车符

  11. \b 匹配一个单词边界 : 例如/er\b/可以匹配'never',但不能匹配'verb',只要 er 后面跟的不是字母、数字、下划线(就是 js 里能用来命名的字符),都算单词边界; \B 非单词边界

image

3. 支持正则的相关方法

3.1 reg.test(str)

检验字符串是否符合要求:/regexp/.test(str) ,返回布尔值

3.2 String.prototype.match

  1. 局部匹配str.match(/regexp/) 匹配到第一个符合的字符串就结束,返回数组 arr,arr[0]为符合此 regexp 的第一个字符串,arr[1]为用()捕获到的字符串。未匹配到时返回 null。

  2. 全部匹配:在正则后面加g(global), str.match(/regexp/g)匹配符合的全部字符串,放到数组里返回,未匹配到时返回 null。

  3. 使用完 match或test 后,可以使用 Regexp.$1 拿到刚匹配完后捕获的分组引用;

3.3 String.prototype.search

3.4 String.prototype.replace

字符串替换 str.replace(/regexp/, str2); 将 str 里符合 regexp 的字符串替换为 str2。replace 方法的第二个参数也可为 function,function 入参 1:匹配,入参 2:捕获。类似局部匹配的返回值

3.5 String.prototype.split

4. 零宽断言

零宽,意味着不会返回匹配的字符

4.1 正向否定断言(?!):后面不是什么。

不允许该位置后符合括号里的情况,

image image

4.2 正向断言(?=):后面是什么

image

给整数每3位加一个逗号:numStr'.replace(/(\d)(?=(\d{3})+)/g, '1,')

image

4.3 负向断言(?<=):前面是什么

该位置之前要符合括号里的情况

image

4.4 负向否定断言(?<!):前面不是什么

不允许该位置之前符合括号里的情况

image

5. 贪婪匹配和惰性匹配:

所谓的"贪婪"的意思就是,如果符合要求就一直往后匹配,一直到无法匹配为止,这就是贪婪模式。所谓的惰性模式就是一旦匹配到合适的就结束,不再继续匹配下去了;

  • 贪婪模式的标识符 + ? * {n} {n,} {n,m}

  • 惰性模式的标识符 +? ?? *? {n}? {n,}? {n,m}?

image image image

相关文章

网友评论

      本文标题:正则表达式 regular expressions

      本文链接:https://www.haomeiwen.com/subject/fqasxdtx.html