前言
正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式,可用于文本搜索和文本替换。
工作中经常会使用正则表达式。虽然用的还算多,自己也懂一些正则表达式的知识,但是真到了要用的时候,还是要借助搜索引擎来解决问题。其实对于解决问题来说,达到 “通过搜索引擎解决问题” 这个程度,在日常工作中已经够用了。 但是,对于知识和技能,如果没有积累没有整理,只是凭借着工作中使用一下的记忆与印象来作为自己的经验的话,是远远不够的,不整理不总结,它永远不会是自己的东西。
秉持着 “没有积累就是没有经验,没有整理就是没有掌握” 的原则,在这里整理一下js中正则表达式的用法。
开始
step.1 什么是正则表达式?
正则表达式是由一个字符序列形成的搜索模式。
当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。
正则表达式可以是一个简单的字符,或一个更复杂的模式。
正则表达式可用于所有文本搜索和文本替换的操作。
step.2 js 正则表达式的语法
/正则表达式主体/修饰符(可选)
例如:
var patt = /hello/i
在上面例子中,/hello/i 是一个正则表达式,其中,hello 是主体,用于检索;i是一个修饰符,表示不区分大小写。
step.3 正则表达式修饰符
i 表示不区分大小写,
g 表示全局匹配(否则会在查找到第一个匹配项后停止),
m 表示执行多行匹配。
step.4 正则表达式常用模式
[abc] 查找方括号之前的任何字符。
[^abc] 查找任何不在方括号之间的字符。
[a-z] 查找任何从小写 a 到小写 z 的字符。
[A-Z] 查找任何从大写 A 到大写 Z 的字符。
[A-z] 查找任何从大写 A 到小写 z 的字符。
[0-9], 查找任何从0到9的数字;
(x|y), 查找任何以 | 分隔的选项。
. 查找单个字符,除了换行和行结束符。
\w 查找单词字符。
\W 查找非单词字符。
\d 查找数字。
\D 查找非数字字符。
\s 查找空白字符。
\S 查找非空白字符。
\b 匹配单词边界。
\B 匹配非单词边界。
\0 查找 NULL 字符。
\n 查找换行符。
\f 查找换页符。
\r 查找回车符。
\t 查找制表符。
\v 查找垂直制表符。
\xxx 查找以八进制数 xxx 规定的字符。
\xdd 查找以十六进制数 dd 规定的字符。
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。
n+ 匹配任何包含至少一个 n 的字符串。
例如,/a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"。
n* 匹配任何包含零个或多个 n 的字符串。
例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"。
n? 匹配任何包含零个或一个 n 的字符串。
例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。
n{X} 匹配包含 X 个 n 的序列的字符串。
例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的两个 "a",且匹配 "caaandy." 中的前两个 "a"。
n{X,} X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。
例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。
n{X,Y} X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。
例如,/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的两个 "a",匹配 "caaaaaaandy" 中的前面三个 "a"。注意,当匹配 "caaaaaaandy" 时,即使原始字符串拥有更多的 "a",匹配项也是 "aaa"。
n$ 匹配任何结尾为 n 的字符串。
^n 匹配任何开头为 n 的字符串。
?=n 匹配任何其后紧接指定字符串 n 的字符串。
?!n 匹配任何其后没有紧接指定字符串 n 的字符串。
step.5 test 方法
test() 方法是一个常用的正则表达式方法。
test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
以下实例用于搜索字符串中的字符 ‘h’:
var patt = /h/;
patt.test("hello,world");
可以将上面代码在浏览器的Console中运行。
因为hello,world 中 包含了字符’h’ , 所以得到结果为 true;
上面的代码可以简写为
/h/.test('hello,world');
根据 [step.4] 中的模式,可以写出下面几个正则表达式的例子:
// 判断str是否是11位数字 ,可以用来简单的检测是否手机号
/^\d{11}$/.test(str);
// 判断是否以王或李开头,并且以强结尾,且中间还有一个非空白字符
/^[王李]\S强$/.test('李大强')
// 判断是否是汉字
/^[\u4e00-\u9fa5]$/.test(char)
//判断name是不是 3字 吴什么凡
/^吴[\u4e00-\u9fa5]凡$/.test(name)
//判断str是否全是英文或数字
/^[A-Za-z0-9]+$/.test(str)
更多的例子读者可以参考文末的参考文档,或者自行搜索。
step.6 match 方法
match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。若没有加g修饰符,则只会匹配第一个;若有g修饰符,则会匹配所有符合条件的字符串,并将其作为一个数组返回。
例子:
var str='hello,world,i am a superman';
str.match(/.a/g);
输出结果为:
(3) [" a", " a", "ma"]
例子:
'<a>asd<c>adas<b>'.match(/<.>/g)
输出结果为:
(3) ["<a>", "<c>", "<b>"]
step.7 search 与 replace 与 split 方法
search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
search 方法可使用字符串作为参数。字符串参数会转换为正则表达式。例子:
'hello,world'.search('w[o|p]r')
输出值为 6 ,表示被搜索的正则表达式的第一个出现为之为6; 若搜索不到则返回-1;
replace的例子如下:
'hello,world'.replace(/.o/g,'--')
输出结果为 “hel–,--rld” 。 如果不加g修饰符的话,则结果为 “hel–,world”
split方法用来 把一个字符串分割成字符串数组,它的参数可以使用正则表达式
'hello,world'.split(/.o/g)
输出为: (3) [“hel”, “,”, “rld”] , 可以看出是被 ‘lo’ 与 ‘wo’ 分割的。
结束
本文简单的总结了 js 中 正则表达式的 相关知识 与 用法。
参考文档
https://www.runoob.com/js/js-regexp.html
https://www.runoob.com/jsref/jsref-obj-regexp.html
来源:CSDN
作者:Fanstorm丶
链接:https://blog.csdn.net/wf824284257/article/details/104029466