1. 限制数量

说明

当某个字符集合前后各有字符时,则该字符集合就被限制了数量为1,如需要不被数量限制可在字符集后面加上量词。

范例

匹配<123456789>"<>"内的数字的个数不等。写一个正则匹配。

错误示例

1
2
 const reg = /<[\\d]>/g
"<123456789>".match(reg) // null 结果为null

解释:这样写貌似看着没有问题。但是实际上由于[\d]前后有字符"<"和">"所以说限制了[\d]只能匹配到一个,所以下面这个示例才是可以的

正确示例

1
2
const reg = /<[\\d]+>/g
"<123456789>".match(reg) // [\"<123456789>\"]

解释:给[\d]加上了量词 * 即可以匹配[\d] 0到多次。且匹配的次数越多优先级越高。

2. 量词(惰性匹配和贪婪匹配)

说明

量词也称为重复,一般形式为{m,n} * + 等。

示例

将字符串<h1>你好</h1><div>你好</div><p>你好</p><span>你好</span>这个html字符串中所有的非p标签,替换为p标签

错误示例

1
2
3
const reg = /<\\/?.*>/g
`"<h1>你好</h1><div>你好</div><p>你好</p><span>你好</span>".match(reg)`
// 结果为:[\"<h1>你好</h1><div>你好</div><p>你好</p><span>你好</span>\"]

解释:因为要匹配的字符串的开头和结尾都符合咱们写的正则的匹配要求,如:<h1>你好</h1><div>你好</div><p>你好</p><span>你好</span>。默认是贪婪匹配的,即能一次性的匹配越多越好。所以最大的字符串被匹配了出来

正确示例

1
2
3
const reg = /<\\/?.*?>/g
"<h1>你好</h1><div>你好</div><p>你好</p><span>你好</span>".match(reg)
// 结果为:[\"<h1>\", \"</h1>\", \"<div>\", \"</div>\", \"<p>\", \"</p>\", \"<span>\", \"</span>\"]

解释:因为“/<\/?.*?>/g”加了?之后就变成了懒惰匹配即一次能匹配的越少越好。所以就匹配出了里面的每一项标签