常用的正则表达式

整理的一些常用的正则表达式

基础用法

^ 表示字符串的开始位置

$ 表示字符串的结束位置

+ 加号前面的字符至少出现一次或多次,等同于{1,}

* 星号前面的字符可以不出现、可以出现一次、可以出现多次,等同于{0,}

? 问号前面的字符只能出现0次或1次,等同于{0, 1}

. 匹配除回车(\r)、换行(\n) 、行分隔符(\u2028) 和 段分隔符(\u2029) 以外的所有字符

| 表示或者,即cat|dog表示匹配cat或dog

\d 匹配0-9之间的任意一个数字,相当于[0-9]

\d+ 匹配一个或多个连续的数字

\D 匹配除0-9以外的任意字符,相当于[^0-9]

\w 匹配任意的字母、数字和下划线,类似但不等价于[A-Za-z0-9_]

\w+ 匹配一次或多次任意的字母、数字和下划线、类似但不等价于[A-Za-z0-9_]

\W 匹配除字母、数字和下划线以外的字符,类似但不等价于[^A-Za-z0-9_]

\W+ 匹配一次或多次除字母、数字和下划线以外的字符,类似但不等价于[^A-Za-z0-9_]

\s 匹配空格(包括制表符、空格符、换行符等),相等于[\t\r\n\v\f]

\S 匹配非空格的字符,相当于[^\t\r\n\v\f]

\b 匹配词的边界,即匹配词的开头和结尾

\B 匹配非词边界,即匹配词的中间

\cX 表示Ctrl-[X],其中的X是A-Z之中任一个英文字母,用来匹配控制字符

[\b] 匹配退格键(U+0008),不要与\b混淆

\n 匹配换行键

\r 匹配回车键

\t 匹配制表符tab(U+0009)

\v 匹配垂直制表符(U+000B)

\f 匹配换页符(U+000C)

\0 匹配null字符(U+0000)

\xhh 匹配一个以两位十六进制数(\x00-\xFF)表示的字符

\uhhhh 匹配一个以四位十六进制数(\u0000-\uFFFF)表示的unicode字符

{n} 恰好重复n次

{n,} 至少重复n次

{n, m} 重复n到m次

() 匹配括号内的内容 例如:(123) 表示匹配数字 123

[] 匹配括号内的某个内容 例如:[123] 表示匹配数字 1、2、3

[0-9] 匹配单个数字

[0-9]+ 匹配多个数字

[^xyz] 匹配除了x、y、z之外的任意字符

[^] 匹配一切字符,其中包括换行符

0-9 匹配0到9中的某一个数字,包括0和9

[\S\s] 匹配一切字符

g修饰符 全局匹配

i修饰符 匹配时忽略大小写

m修饰符 多行匹配

子表达式 正则表达式中使用括号括起来的正则表达式,例如正则表达式 /^\.\/(.*)\.\w+$/ 中有一个子表达式 .*

RegExp.$1 正则表达式的第一个子表达式

匹配手机号码

/^1(3[0-9]|4[57]|5[0-35-9]|7[0135678]|8[0-9]|9[0-9])\d{8}$/

匹配正整数

/^[1-9]\d*$/

匹配实数

/^-?\d+\.?\d*$/

匹配正实数

/^\d+\.?\d*$/

判断是否是科学计数法

/^[-]?\d+(\.\d+)?[eE][-+]\d+$/.test('1.13E-05');
/^[-]?\d+(\.\d+)?[eE][-+]\d+$/.test('-1.13E-05');
/^[-]?\d+(\.\d+)?[eE][-+]\d+$/.test('1.13');

执行结果

提取字符串中一部分字符串

提取 ‘./app.js’ 中的 ‘app’(提取正则表达式中与第一个子表达式匹配的数据)

'./app.js'.replace(/^\.\/(.*)\.\w+$/, '$1');

执行结果

提取科学计数法中底数部分的数据

提取正则表达式中与第一个子表达式匹配的数据

"1.13E-05".replace(/^([-]{0,1}\d+(\.\d+)?)[eE][-+]\d+$/, "$1");

执行结果

提取科学计数法中指数部分的数据

提取正则表达式中与第二个子表达式匹配的数据

"1.13E-05".replace(/^[-]{0,1}\d+(\.\d+)?[eE][-+](\d+)$/, "$2");

执行结果

提取字符串中的字母

该正则表达式会将字符串中非字母的字符替换成空字符

"Aa1Bb2Cc3Dd4Ee5Ff6".replace(/[^a-z]+/ig, "");
"Aa1Bb2Cc3Dd4Ee5Ff6".replace(new RegExp("[^a-z]+", "ig"), "");

执行结果

提取字符串中的数字

该正则表达式会将字符串中非数字的字符替换成空字符

"Aa1Bb2Cc3Dd4Ee5Ff6".replace(/[^0-9]+/ig, "");
"Aa1Bb2Cc3Dd4Ee5Ff6".replace(new RegExp("[^0-9]+", "ig"), "");

执行结果

将空格替换成逗号

该正则表达式会将字符串中的空格替换成逗号

"a b c d e f g".replace(/\s+/g, ",");

执行结果

去掉字符串中的空格

"a b c d e f g".replace(/\s+/g, "");

执行结果

将中文括号替换成英文括号

let str = "hello(你好)";
const reg1 = /[\(]/g;
const reg2 = /[\)]/g;
str.replace(reg1, "(").replace(reg2, ")");

执行结果

提取网站域名中的字符串

提取网站域名 https://map.baidu.com/x/y/z 中的 map.baidu.com

// 会匹配两次,第一次使用整个正则表达式去匹配,第二次使用子正则表达式去匹配,匹配结果以一个数组的形式返回
/https:\/\/([^\/]+)/.exec("https://map.baidu.com/x/y/z")[1];

// 会匹配两次,第一次使用整个正则表达式去匹配,第二次使用子正则表达式去匹配,匹配结果以一个数组的形式返回
"https://map.baidu.com/x/y/z".match(/https:\/\/([^\/]+)/)[1];

// 会采用子正则表达式去匹配,并返回与第一个子表达式匹配的结果
"https://map.baidu.com/x/y/z".replace(/^https:\/\/([^\/]+)(\/[a-z])+$/, "$1");

执行结果

在 Vscode 中使用正则表达式实现全局替换

需要将 id=”xxx” 替换成 id=”xxx” name=”xxx”

查询的正则表达式:id="(\S+)"
替换的正则表达式:id="$1" name="$1"

替换前前的文本:

id="meishadevs"
id="font-end"
id="blog"

替换后的文本:

id="meishadevs" name="meishadevs"
id="font-end" name="font-end"
id="blog" name="blog"

判断字符串中是否存在中文

/[\u4e00-\u9fa5]/g.test('a你1好@啊');
/[\u4e00-\u9fa5]/g.test('a1@');

执行结果

查找字符串中的子串

使用 search 方法查找第一个满足条件的字符串在整个字符串中的位置,如果没有找到,则返回 -1

"meishadevs is a boy".search(/meishadevs/);
"Tom is a boy, meishadevs".search(/meishadevs/);
"Tom is a boy".search(/meishadevs/);

执行结果

去掉字符串中多余的斜杠

var str = "a//b//c//d//e";
var result = str.replace(/\/\//g, '\/');

console.log("处理前:", str);
console.log("处理后:", result);

执行结果

去掉字符串中的中括号

var str = "[Tom, Mike, Bob, Jack, Nancy, Cindy]";

var result = str.replace(/[\[\]]/g, '');

console.log("处理前:", str);
console.log("处理后:", result);

执行结果

参考链接

meishadevs欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明: 【文章转载自meishadevs:常用的正则表达式

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器