前面第一第二篇我们学习了括号和云字符都是匹配单个位的,本章我们学习如果多位匹配--量词。
量词表
量词表1
量词 | 对应的{} | 描述 |
---|---|---|
n+ | {1,+∞} | 匹配任何包含至少一个 n 的字符串。 |
n* | {0,+∞} | 匹配任何包含零个或多个 n 的字符串。 |
n? | {0,1} | 匹配任何包含零个或一个 n 的字符串。 |
n{X} | {X} | 匹配包含 X 个 n 的序列的字符串。 |
n{X,Y} | {X,Y} | 匹配包含 X 至 Y 个 n 的序列的字符串。 |
n{X,} | {X,+∞} | 匹配包含至少 X 个 n 的序列的字符串。 |
除了上面这些量词之前,在W3C里面也把下面这几个收纳到了量词表里面
量词表2
量词 | 描述 | |
---|---|---|
n$ | 匹配任何结尾为 n 的字符串。 | |
^n | 匹配任何开头为 n 的字符串。 | |
?=n | 匹配任何其后紧接指定字符串 n 的字符串。 | |
?!n | 匹配任何其后没有紧接指定字符串 n 的字符串。 |
练习
题目1:把下面的字符串"abbbbabbbbabb"切成5位5位的,剩余的不够5位的就按照4或者3位切开
const reg = /\w{3,5}/g
const str = 'abbbbabbbbabb'
str.match(reg) // ["abbbb", "abbbb", "abb"]
解析: 此处体现除了正则表达式的贪婪匹配原则
题目2:看题猜结果
const reg = /^abc$/
const str = 'abcabc'
str.match(reg) // 打印出什么呢
解析:这里应该是打印出['abcabc']还是['abc']呢还是其它答案呢? 去掉我们的刚学的“^”(以什么开头)和“$”(以什么结尾)
const reg = /abc/
const str = 'abcabc'
str.match(reg) // ['abc','abc']
这里加上了^和$意思是说:匹配出来的字符串它的a在这整个被匹配的串中是开头,它的c在整个串中是在结尾的位置,因此可以知道上面的答案的是null
const reg = /^abc$/
const str = 'abcabc'
str.match(reg) // null
题目3: 写一个正则表达式,检验字符串首尾是否有字符串(只要首或者尾有就行)
提示:单竖线“|”可以表示“或”
const reg = /^\d|\d$/g
const str = '123abc'
reg.test(str) // true