Skip to main content

正则-基础

关于元字符 参考: https://tool.oschina.net/uploads/apidocs/jquery/regexp.html

1.正则有两种模式,一种为贪婪模式(默认),另外一种为懒惰模式,以下为例:

?的一个用法1 匹配0次或1次。 用法2:作为正则的懒惰模式。

(abc)dfe(gh)
对上面这个字符串使用(.*)将会匹配整个字符串,因为正则默认是尽可能多的匹配。
虽然(abc)满足我们的表达式,但是(abc)dfe(gh)也同样满足,所以正则会匹配多的那个。

如果我们只想匹配(abc)和(gh)就需要用到以下的表达式:
(.*?)
在重复元字符*或者+后面跟一个?,作用就是在满足的条件下尽可能少匹配。

1-2 .点

匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“(.|\n)”的模式。

例如正则表达式r.t匹配这些字符串:rat、rut、r t,但是不匹配root。

正则表达式 .*? 是什么意思啊?
*表示任意数量,它跟.配合,.*表示任意数量的任意字符,?表示懒惰匹配。

1-3 *匹配0或多个正好在它之前的那个字符。

例如正则表达式。*意味着能够匹配任意数量的任何字符。

  • *在正则表达式中代表匹配前面的元素零次或多次。它用于匹配前一个字符、子表达式或组的零个或多个重复。
  • 例如,正则表达式ab*c会匹配字符串"ac"、"abc"、"abbc"等,因为b*匹配前面的'b'零次或多次,所以它可以匹配包含零个或多个'b'的字符串。

1-4 ?匹配0或1个正好在它之前的那个字符。

匹配0次或1次。
注意:这个元字符不是所有的软件都支持的。

1-2.组合起来

表达式 .* 就是单个字符匹配任意次,即贪婪匹配。 
表达式 .*? 是满足条件的情况只匹配一次,即最小匹配.

懒惰模式正则:
src=".*?"
结果:src="test.jpg"

w 和 W

\w 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。

\W 匹配非字母、数字、下划线。等价于 ‘A-Za-z0-9_

\W+:匹配一个或多个非字母进行切割,匹配到的非字母不缓存;
(\W+):匹配一个或多个非字母进行切割,匹配到的非字母全部缓存;
(\W)+:匹配一个或多个非字母进行切割,匹配到的非字母缓存最后一位;
[\W]+:匹配一个或多个非字母进行切割,匹配到的非字母不缓存;(跟\W+一样)
[\W+]:匹配一个非字母进行切割,匹配到的非字母不缓存(加号只是相当于一个符号,但与\W含义重叠,无效)。

^ 和 $

^字符表示开头,$字符表示结尾

i是忽略大小写,g是全局

/[h]/gi
全局搜索h和H

\s表示空白符,+表示多个空白符

* [\s]表示,只要出现空白就匹配
* [\S]表示,非空白就匹配

1.中括号[]: 匹配单个字符是否属于中括号中的⼀个字符

/\s+/g
匹配多个空格

2.⼤括号{ }, ⽤于重复次数, ⼤括号左边表达式的匹配次数

3.⼩括号( ), 表⽰⼀个⼦表达式

字符串: hello world!!
js正则表达式: /(ell)/g
ell
匹配到的内容是: h
o world!!
此处注意, 如果字符串是helo 则是匹配不到任何内容的


⼩括号中的内容是⼀个完整的正则表达式
1. (ha){2} 匹配 内容为haha
2. ((ha){2} hello) 匹配到的内容为: haha hello
3. (a | b){2} 能够匹配到的内容为 aa bb ab ba