正则表达式:
常常缩写为"regex" 或 "regexp" 是用于帮助程序员匹配,搜索和替换文本的模式。
语法(格式):
/pattern/modifiers;
解释:
/ 模式/ 修饰符
正则表达式的方法:
// 使用测试方法:
let myString = "Hello";
let myRegex = /He/;
let result = myRegex.test(myString);
结果: result = true
用列:
1.匹配字符串:
1. 匹配字符串
let wa = "Some is hidding in the text.";
let waRegex = /hidding/;
let result = waRegex.text(wa);
结果: true
2. 同时使用多种模式匹配字符串 使用 "|"
let wa = "Some is hidding in the text.";
let waRegex = /hidding|in/;
let result = waRegex.text(wa);
解释:
同时匹配 hidding 和 in 两个字符串 在 wa 中;
2.提取匹配项 方法match():
通过match() 方法可以提取找到的实际匹配项,并返回匹配的字符串;
let wa = "Some is hidding in the text.";
let waRegex = /Some/;
let result = wa.match(waRegex);
结果:
result = Some;
3.忽略大小写(i):
let wa = "Some is hidding in the text.";
let waRegex = /some/i;
let result = waRegex.text(wa);
解释:
查找字符串 some 且忽略大小写(i), Some,some,soMe....等等, 都可以匹配的到
4.全局匹配:
let wa = "Some is hidding in the text.";
let waRegex = /i/g;
let result = waRegex.text(wa);
解释:
g 使用全局访问的方式,就不会发现第一个匹配项就返回;而是遍历一遍整个字符串。
如果没有加 g 只能提取或搜索一次模式匹配。
5.使用通配符:
let wa = "fun sun pun nun bun";
let waRegex = /un./;
let result = waRegex.test(wa);
结果:
字符串 fun sun pun nun bun 都会被匹配到
语法:
/有共性部分的字符 ./
. 是通配符,将匹配任何一个字符
6.单个字符串的多种可能性匹配:
let i = "Big";
let a = "Bag";
let u = "Bug";
let waRegex = /B[iau]g/;
i.match(waRegex);
a.match(waRegex);
u.match(waRegex);
结果:
Big,Bag,Bug 都能匹配到
将不确定的词放到 [] 中,将会匹配到所有可能的词
7.匹配字母表中的字母:
let wa = "The quick brown fox jumps over the lazy dog.";
let waRegex = /[r-z]he/;
解释;
匹配 r 到 z 之间可能匹配到的字符串
使用 "-" 连字符来定义范围
匹配字母和数字:
let quoteSample = "Blueberry 3.141592653s are delicious.";
let myRegex = /[a-z0-9]/ig;
解释:
匹配所有 字母(a到z)和数字(0到9),而且全局搜索,不区分大小写;
8.匹配单个未指定的字符:
let quoteSample = "3 blind mice.";
let myRegex = /^aeiou^0-9/gi;
解释:
匹配所有非字母和非数字的字符串,全局搜索,不分大小写
使用 " ^ " 否定字符集
需要在开始括号后面和不想匹配的字符前面
作用:是否定此标志之后的匹配项
9.匹配出现一次或多次的字母
let difficultSpelling = "Mississippi";
let myRegex = /s+/g;
解释:
匹配 s 出现出现的所有符合条件的 's' 'ss' 'sss'
使用 + 符号来检查
匹配出现零次或多次的字符
let chewieQuote = Aaaaaaaaaaaaaaaarrrgh!
let chewieRegex = /a*/gi;
let result = chewieQuote.match(chewieRegex);
解释:
全局搜索匹配所有出现的 a ,不分大小写
10.用惰性匹配来查找字符:
let text = "<h1>Winter is coming</h1>";
let myRegex = /<.*?>/;
解释:
匹配最短的符合的项,
例如:
在 titiatiat 中 使用正则表达式 /t[a-z]*?i/
会返回 ti 只返回最短的匹配到的
这就是惰性匹配
而
在 titiatiat 中 使用正则表达式 /t[a-z]*i/
会返回最长的 titiati
这就是和惰性匹配相反的:贪婪匹配。
惰性匹配比贪婪匹配多了个 ? 就是使用 ? 符号来将此模式变成惰性匹配
11.匹配字符串的开头
let rickyAndCal = "Wo hen shuai.";
let calRegex = /^Wo/;
解释:
^ 不仅可以来创建一个否定字符集,
还可以用来判断该字符串,是否在开头。
匹配字符串的末尾:
let rickyAndCal = "Wo hen shuai.";
let calRegex = /shuai$/;
解释:
使用 $ 锚点字符来匹配字符串的末尾
提升练习:
let quoteSample = "The five boxing wizards jump quickly.";
let alphabetRegexV2 = /\w+/;
解释:
在 JavaScript 中与字符串匹配最接近的元字符是 \w ,
这个缩写等同于: /[A-Za-z0-9_]/
匹配所有字母字符 和 数字字符
匹配所有数字:
let movieName = "2001: A Space Odyssey";
let numRegex = /\d/g;
解释:
使用 \d 来匹配所有数字
元字符 \d 查找数字
匹配所有非数字:
let movieName = "2001: A Space Odyssey";
let numRegex = /\D/g;
解释:
匹配所有非数字,
\D 相当于 [^0-9]
限制可能的用户名:
要求:
1.用户名只能是数字字母字符。
2.用户名中的数字必须在最后。 数字可以有零个或多个。 用户名不能以数字开头。
3.用户名字母可以是小写字母和大写字母。
4.用户名长度必须至少为两个字符。 两位用户名只能使用字母。
let username = "Jack";
let usernameRegex = /^[a-z][a-z]+\d*$|^[a-z]\d\d+$/i;
// let usernameRegex = /^[a-z]([0-9]{2,}|[a-z]+\d*)$/i; 第二种解法
解释:
1. ^[a-z] 输入开始必须是字母
2. [a-z]+ 以下字符是字母
3. \d*$ 输入以0位或更多位数字结尾
4. | 或
5. ^[a-z] 第一个字符是字母
6. \d\d+ 以下字符是2位或更多位数字结尾
7. $ 输入结尾
1. ^[a-z] 输入开始必须为字母
2. [0-9]{2,0} 以两个或多个数字结尾 " { number1 , number2 } " { 上限 , 下限 }
3. | 或
4. [a-z]+ 下一个有一个或多个字母
5. \d* 并以零个或多个数字结尾
6. $ 输入结尾
7. i 忽略大小写
12.匹配空白字符:
let sample = "Whitespace is important in separating words";
let whiteSpace = /\s/g;
解释:
使用 \s 搜寻空格,此模式可以匹配空格,回车符,制表符,换页符和换行符。
匹配非空格:
let sample = "Whitespace is important in separating words";
let whiteSpace = /\S/g;
解释:
使用 \S 搜寻非空白字符,不匹配空格,回车符,制表符,换页符和换行符。
类似元字符: ^[\r\t\f\n\v]
13.指定匹配上限和下限
let ohStr = "Ohhh no";
let ohRegex = /O{3,5}h/
解释;
使用 数量说明符号 "{}" ,其中两个数字代表上限和下限
只指定匹配下限
let ohStr = "Ohhh no";
let ohRegex = /O{3,}h/
解释:
使用指定下限 在{}只写一个数字后面跟一个逗号;
指定匹配的确切数量
let timStr = "Timmmmber";
let timRegex = /Tim{3}ber/;
解释;
此处只匹配 3 个 m,结果为Timmmer
14.检查全部或无:
let favWord = "favorite"; // 美式英文
let favWord1 = "favourite"; // 英式英文
let favRegex = /favo?rite/
解释:
用于检查这些不确定情况,我们使用问号 ? 指定可能存在的元素
这个符号会检查前面的零个或一个元素。
结果:
favorite , favourite 都能匹配到
15.正向先行断言和负向先行断言:
先行断言(lookaheads): 是告诉JavaScript 在字符串中向前查找的匹配模式。