您的当前位置:首页正文

正则基础使用

2025-01-16 来源:个人技术集锦

正则基础使用

定位符:

^ 匹配字符串开始位置,如果匹配 ^ 字符,用 \^
$ 匹配字符串结束位置,如果匹配 $ 字符,用 \$
\b 匹配一个单词边界,即字雨空格之间的位置
\B 和\b相反,匹配非单词边界

修饰符:

i 忽略大小写匹配,如/^\d&/i
g 全局匹配,如/^\d&/g
m 执行多行匹配,如/^\d&/m

特殊字符:

$ 匹配字符串结束位置,如果匹配 $ 字符,用 \$
() 标记一个子表达式的开始和结束,子表达式可以获取供以后使用。要匹配这些字符本身,使用 \( 和 \),可以使用\1 数字来引用第一个子表达式
* 匹配前面的子表达式零次或多次。要匹配 * 字符,使用 \*
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,使用 \+
? 匹配前面的子表达式零次或一次,要匹配 ? 字符,请使用 \?
. 匹配除换行符 \n 之外的任意字符。要匹配 . 字符,使用 \. 
[ 标记一个中括号表达式的开始,要匹配  [ 字符,使用 \[
\ 可以用来表示特殊匹配字符,比如\d,\r这些,如果想匹配()*这些特殊字符本身,就用\*,\(来转义一下
^ 匹配字符串开始位置,如果匹配 ^ 字符,用 \^,在表达式中代表非,例如:[^0-9]代表匹配非数字的
{ 标记限定符表达式的开始。要匹配 { 字符,请使用  \{
|  代表”或“操作,可以匹配多个,要匹配 | 字符,请使用 \|
/**/ 正则表达式在/^[0-9]{1}/中间

限定符:

* 表示匹配出现0次和多次,也可以用{0,}
+ 表示匹配出现1次和多次,也可以用{1,}
? 表示匹配出现0次或1次,也可以用{0,1}
{n} 表示匹配出现指定的n次,也就是=n
{n,} 表示匹配出现最少是n次,也就是>=n
{n,m} 表示匹配出现最少是n次,最多是m次,也就是a>=n,a<=m,并且n<=m

元字符:

\f 匹配换页符
\n 匹配换行符
\r 匹配回车符
\s 匹配任何空白字符,包括空格、制表符、换页符等,等价于 [ \f\n\r\t\v]
\S 大写的S,表示匹配任何非空白字符,等价于 [^ \f\n\r\t\v]
\t 匹配一个制表符
\v 匹配一个垂直制表符
\d 小写的d,匹配一个数字,等价于[0-9]
\D 大写的D,匹配一个非数字,等价于[^0-9]
\w 小写的w,匹配字母,数字,下划线,等价于[a-zA-z0-9_]
\W 大写的W,匹配非字母,数字,下划线,等价于[^a-zA-z0-9_]
\s 小写的s,匹配任何空白字符,包括空格、制表符、换页符等,等价于 [ \f\n\r\t\v]
\S 大写的S,表示匹配任何非空白字符,等价于 [^ \f\n\r\t\v]

匹配字符:

a|b 匹配a或者b,例如a|b,可以匹配到a或者b.
(a|b|c)  匹配包含a,b,c,和a|b有点区别,例如(a|b|c),可以匹配到a1,b1,c1
(a) 子表达式匹配到a,并记住匹配项,这种叫做捕获括号
(?:a) 子表达式匹配到a,不记住匹配项,这种叫做非捕获括号
a(?=bbb) 叫做正向肯定查找,a后面连续跟着3个b
a(?!bbb) 叫做正向否定查找,a后面不连续跟着3个b
[abc] 匹配字符中包含a,b,c,字符
[^abc] 匹配字符中非a,b,c,字符
[a-z] 匹配a-z的所有小写字母
[^a-z] 匹配非a-z中的小写字母
[0-9] 匹配0-9的数字
[^0-9] 匹配一个非数字
[a-z0-9] 匹配小写字母a-z,数字0-9
[A-Z0-9] 匹配大写字母A-Z,数字0-9
[\u4e00-\u9fa5] 匹配中文

正则模式:

正则默认匹配是贪婪模式,比如匹配数字出现/\d{3,5}&/,会匹配到3-5连续出现的数字,改为/\d{3,5}?&/,在匹配后添加 ? 符号就只会匹配最少的3个连续的,即为懒惰模式

方法:

search(pattern) 检测满足正则的匹配字符串,并返回匹配到的起始位置
replace(pattern,'a') 满足正则匹配到的字符串替换
pattern.test(str) 检测str是否满足pattern正则校验,返回true和false
pattern.exec(str) 检测str满足pattern正则的字符,匹配到就会返回匹配到的字符串结果
str.match(pattern) 检测str满足pattern正则的字符串,匹配到的结果会返回一个数组

常用正则:

1.正整数和小数,并保留两位小数:/(^[1-9][0-9]*$)|(^[1-9][0-9]*\.[0-9]{1,2}$)|(^0\.[0-9]{1,2}$)|(^0$)/
2.整数和两位小数:/(^[0-9]{1,9}$)|(^[0-9]{1,9}[\.]{1}[0-9]{1,2}$)/
3.字母,数字,下划线,并在1-16位:/\w{1,16}/
4.匹配中文:/[\u4e00-\u9fa5]/
5.校验手机号:/[1-9][0-9]{10}]/
6.邮箱:/^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$/
7.格式化为千分位1:'1233333456789.2322'.replace(/(?<!\.\d+)(?=\B(\d{3})+\b)/g, ',')
8.格式化千分位2:Number('12344444.1111').toFixed(2).replace(/(\d)(?=(\d{3})+\b)/g,'$1,')
9.身份证号1代15位:/^[1-9]\d{7}(?:0\d|10|11|12)(?:0[1-9]|[1-2][\d]|30|31)\d{3}$/
10.身份证号2代18位:/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/
11.身份证号支持1代和2代:/(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0[1-9]|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/
12.微信号(wx),6至20位,以字母开头,字母,数字,减号,下划线:/^[a-zA-Z][-_a-zA-Z0-9]{5,19}$/
13.http和https开头的网址: /(http|https):\/\/([\w.]+\/?)\S*/
显示全文