正则表达式是匹配模式,要么匹配字符,要么匹配位置。请记住这句话
# 第一章 正则表达式字符匹配攻略
# 1.1 两种模糊匹配
如果正则只有精确匹配是没多大意义的,比如
/hello/,也只能匹配字符串中的"hello"这个子串
var regex = /hello/;
console.log( regex.test("hello") );
// => true
@前端进阶之旅: 代码已经复制到剪贴板
- 正则表达式之所以强大,是因为其能实现模糊匹配
- 而模糊匹配,有两个方向上的“模糊”:横向模糊和纵向模糊
# 1.1.1 横向模糊匹配
- 横向模糊指的是,一个正则可匹配的字符串的长度不是固定的,可以是多种情况的
- 其实现的方式是使用量词。譬如
{m,n},表示连续出现最少m次,最多n次
比如
/ab{2,5}c/表示匹配这样一个字符串:第一个字符是“a”,接下来是2到5个字符“b”,最后是字符“c”。测试如下
var regex = /ab{2,5}c/g;
var string = "abc abbc abbbc abbbbc abbbbbc abbbbbbc";
console.log( string.match(regex) );
// => ["abbc", "abbbc", "abbbbc", "abbbbbc"]
@前端进阶之旅: 代码已经复制到剪贴板
# 1.1.2 纵向模糊匹配
纵向模糊指的是,一个正则匹配的字符串,具体到某一位字符时,它可以不是某个确定的字符,可以有多种可能
- 其实现的方式是使用字符组。譬如
[abc],表示该字符是可以字符“a”、“b”、“c”中的任何一个
var regex = /a[123]b/g;
var string = "a0b a1b a2b a3b a4b";
console.log( string.match(regex) );
// => ["a1b", "a2b", "a3b"]
@前端进阶之旅: 代码已经复制到剪贴板
只要掌握横向和纵向模糊匹配,就能解决很大部分正则匹配问题
# 1.2 字符组
需要强调的是,虽叫字符组(字符类),但只是其中一个字符。例如
[abc],表示匹配一个字符,它可以是“a”、“b”、“c”之一
# 1.2.1 范围表示法
如果字符组里的字符特别多的话,怎么办?可以使用范围表示法
- 如果字符组里的字符特别多的话,怎么办?可以使用范围表示法
- 比如
[123456abcdefGHIJKLM],可以写成[1-6a-fG-M]。用连字符-来省略和简写 - 因为连字符有特殊用途,那么要匹配“
a”、“-”、“z”这三者中任意一个字
