正则匹配包含指定内容的标签_【前端⾯试】JS正则表达式正则是处理字符串的,并进⾏筛选,替换。
1、最简单的匹配,正则的 helloWorld
console
2、元字符:在正则当中有特殊语义的字符
. [] [^] ? * + {min, max} ^ $ () 12 | d D w W s S
. 可以匹配除去空⽩字符外的所有字符
3、特殊语义的字符不可以直接匹配
console.log(/+/.test('+'))
4、匹配字符组
console.log(/[1-9]/.test('9'))
console.log(/[9-1]/.test('9'))
第⼀个可以正确匹配,第⼆个会报错
console.log(/[0-9a-zA-Z]/.test('asdf')) //匹配四次
console.log(/[0-9a-zA-Z]+/.test('asdf')) //匹配⼀次
[0-9a-zA-Z] 和 [a-zA-Z0-9] 是等价的
范围取反,除了 0-9 都可以
/[^0-9]/
[0-9] 等价于 d
[^0-9] 等价于 D
[0-9a-zA-Z_] 等价于 w 注意,包涵下划线
s 空⽩字符
5、量词
例1:邮编
100024
/[0-9]{6}/.test(code)
/d{6}/.test('1231234')
可以匹配上,但是,不知道哪⾥匹配,此时请使⽤ exec
/d{1,}.test('121314124')
意思是最少⼀个,最多有多少个匹配多少个。
正则有特殊语义,不要随便加空格。
等价关系:
{0,1}
* {0,}
+{1,}
量词是修饰前⾯那⼀个字符的。
⽐如
/ab{2}/.exec('abb') //可以匹配
/ab{2}.exec('abab')/ //⽆法匹配
6、括号
() 有两个功能:分组和引⽤。
例2 ⽇期
2020-9-14
/d{4}-d{1,2}-d{1,2}/.exec('2020-9-14')
假如我想把 2020 9 14 拿出来,则可以⽤ () 捕获
/(d{4})-(d{1,2})-(d{1,2})/.exec('2020-9-14')
插⼀点别的
var
7、反向引⽤
/([a-z]1)/.test('bbb') //true
/(cat)(1){2,3}.test('catcatcatcat')/  //可以匹配
/(cat)(1){2,3}.test('catcatcatcatcat')/  //⽆法匹配
8、其他
⾮捕获
/(abc){2}/.exec('abcabc') // 0:abcabc 1:abc
/
(?:abc){2}/.exec('abcabc'); // 0:abcabc 此时并没有捕获到 abc 匹配 200-255
/2[0-4]d|25[0-5]/
匹配 0-255
/d|[1-9]d|1dd|2[0-4]d|25[0-5]/
/^(d|[1-9]d|1dd|2[0-4]d|25[0-5]).$/.test('256.') //false
匹配年⽉⽇
⽉:1-12 [1-9]|1[0-2]
⽇:1-31 [1-9]|2d|3[01]
⼩时:0-24 d|1d|2[0-4]
分钟:0-59 d|5d
秒: 0-59
正向预查
正向预查指的是问号后⾯的字符必须出现在想匹配字符串的后⾯。设置的内容不参与匹配与捕获,只是设置了⼀个条件⽽已。
var reg = /cainiao(?=8)/
var str = 'cainiao9';
(str)) //⽆法捕获
所以,这两种写法是等价的
reg1 = /^d{2}$/
reg = /(?=^)d{2}(?=$)/
负向预查
负向预查使⽤ ?!,意思是字符串中⼀定不能包含哪些字符或者不能由哪些字符组成。
题1:匹配密码
编写⼀个正则,验证 6-16 位字符串,必须同时包含⼤⼩写字母和数字
/(?!^[0-9a-z]+$)(?!^[0-9A-Z]+$)(?!^[a-zA-Z]+$)^[0-9a-zA-Z]{6,16}?/
题2:匹配指定字符串
编写正则,1-10位字符串,数字,字母,下滑线,必须有_
/(?!^[a-zA-Z0-9]+$)^[a-zA-Z0-9_]{1,10}$/
题3:匹配 url
let str="www.mike/?lx=100&from=wx#video"
协议: http/https/ftp
(http|https|ftp://)?
域名: 或 或 kbs.sport.qq 或 kbs.sports.qq
(([w-]+.)+[0-9a-z]+)
请求路径 index.html 或 stu/index.html 或 /stu/ 或 /
((/[^/]*)+)?
js 正则替换[^/]的意思是不是/的字符都可以
问号传参 ?xxx=xxx&xxx=xxx&xxx=xxx
(?[^#]+)?
哈希值 #xxxx
(#.+)?
把这五部分拼接起来即可
let
/i 忽略⼤⼩写匹配
题4:匹配标签
<h1></h1>
let reg = /<([^<>]+)>([./s]*)?</(1)>/
看懂上⾯这个正则有两点,⼀个是把 h1 捕获⽤在第⼆个标签上,第⼆个是标签⾥⾯的内容只要不是 <> 就都可以。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。