正则表达式
(regular expression/regex)
- 概念
用于匹配(match)、查找(search)字符串
随着深入学习,你将会理解什么叫
”应避免使用正则表达式解析 HTML,但使用正则表达式匹配 HTML 字符串的模式完全没问题“
- 用法
- 一
例如
let testStr = "freeCodeCamp";
let testRegex = /Code/;
testRegex.test(testStr);
//注:此处提前注明一下,在js中,注意理解并区分.test()与.match()的使用顺序
/*test:把 待测的字符串 放入 定义的匹配式子 中,看看其符不符合 所定义匹配式子 的要求
match:把 定义的匹配式子 放入 待测字符串 中,看看在 待测字符串 能不能找出匹配的部分
*/
其中 .test 函数用于测试是否匹配成功。
值得注意的是,该表达只能匹配完全一样的字符,无法识别大小写不同等等的情况。
.test()只能用于检查是否匹配;而.match()可用于输出匹配的结果
- 二
一些很好用的关键字
关于匹配
匹配多个字符
/ /中用 | 隔开
-
可区分大小写的表达:
/apple/i
即匹配号后面加个 i,大小写都会被允许匹配
-
/apple/g
可用于多次匹配
注:如果想要同时使用,格式如下:
``/apple/ig`
-
不完全匹配:
在匹配关键词中用 . 代替,因为 . 可匹配任何字符
如:
/ .un/
,可匹配出文中诸如run fun 等等词 -
仅需要特定值的不完全匹配
如:想要 big,bag,不想要 bug
/b[ia]g/
-
匹配一定范围内的字符:
如:想要bag,bbg,bcg…直到bzg
/b[a-z]g/
注:包括但不限于字母表,如也可以是数字的范围等等
-
匹配字母表中的所有选项,有一个更方便的表达:
/\w/
, 其效果与/[a-zA-Z0-9]/
一致,也同样会将下划线匹配进去-
匹配数字:
/\d/
-
匹配空格:
/\s/
(注:此处的空格为广义,包括了\r\t\f\n\v的键)
关于匹配的其他补充:特殊符号用法
-
+(一次或多次)
举个例子:
/a+/ig
匹配“abc”时回返回"a";“aabc"时返回"aa”,“abab"时返回"a” “a” -
*(0次或多次)
举个例子:
let soccerWord = "gooooooooal!"; let gPhrase = "gut feeling"; let oPhrase = "over the moon"; let goRegex = /go*/; soccerWord.match(goRegex); gPhrase.match(goRegex); oPhrase.match(goRegex);
“In order, the three
match
calls would return the values["goooooooo"]
,["g"]
, andnull
.”个人对这个解释的理解(这只是初学的想法,很有可能是谬误哈,大家不要轻信,有错误也欢迎批评指正):
多个:如果检索时*前的字符都出现了且至少有一个连续出现,那么那一长串字符都会被返回;如果出现了第n个字符,从第n+1个字符开始就不匹配了,那么返回前n个字符;
0个:如果前n个都没有,从第n+1个开始才对应,则也是返回null
-
关于lazy matching:
之前默认的匹配是“越长越好”,尽可能把匹配的结果全部返回;但是只要在//中加上一个“?",就会得到一种很简略的返回结果。
应用:在使用正则表达式匹配html的字符串时,如
"<h1>Winter is coming</h1>"
一句,我们往往只需要一个<h1>
的结果,而不需要标题的具体内容。 -
关于匹配次数:
如:
/\a{5,8}/
表示需要匹配a字符3到5次即可
-
-
关于不匹配
- /[^xxx]/
表示匹配除xxx以外的字符
- /\w/
的不匹配等效于/\W/
以此类推,这些广义替换字符的大写等效于它的不匹配,再如/\D/
为不匹配数字