正则表达式
JS 中关于正则的方法
RegExp 实例方法
reg.test(str)
:返回一个布尔值,表示当前模式是否能匹配参数字符串reg.exec(str)
:返回匹配结果。如果发现匹配,就返回一个数组,成员是匹配成功的子字符串,否则返回 null
String 实例方法
String.match(reg)
:返回一个数组,成员是所有匹配的子字符串。String.search(reg)
:按照给定的正则表达式进行搜索,返回一个整数,表示匹配开始的位置。String.replace(reg, str)
:按照给定的正则表达式进行替换,返回替换后的字符串。String.split(reg)
:按照给定规则进行字符串分割,返回一个数组,包含分割后的各个成员。
匹配字符串
两种模糊匹配
匹配方式 | 如何匹配 | 写法 | 描述 |
---|---|---|---|
横向模糊匹配 | 量词 | {n,m} | 最少出现多少次,最多出现多少次。 |
纵向模糊匹配 | 字符组 | [xyz] | 匹配 x、y、z 的任何一个 |
字符组
当字符组中匹配的字符串特别的情况,可以使用简写。
- 范围表示法:
[1-3]
表示从 1、2、3 匹配任意一个数组 - 排除字符组:
[^abc]
表示匹配除了 abc 之外的任意一个字符
常见的简写形式:
字符组 | 描述 |
---|---|
[0-9] or \d | 表示匹配 0-9 的一位数字 |
[a-z] | 匹配 a-z 的一个字母 |
[A-Z] | 匹配 A-Z 的一个字母 |
\d 和 \D | \d 表示[0-9],\D 表示[^0-9]。记忆:digit |
\w 和 \W | \w 表示[0-9a-zA-Z],\W ,表示[^0-9a-za-z]。记忆:word |
\s | 表示[ \t\v\n\r\f] 。表示空白符,记忆方式:space |
\S | 表示[^ \t\v\n\r\f] 。非空白符。 |
. | 表示[^\n\r\u2028\u2029] 。通配符,表示几乎任意字符。 |
量词
量词简写
字符组 | 具体含义 |
---|---|
{n,} | 表示至少出现 n 次 |
{n} | 等价于{n,n},表示出现 n 次 |
? | 等价于{0,1},表示出现或者不出现。 记忆方式:问号的意思表示,有吗? |
+ | 等价于{1,},表示出现至少一次。 记忆方式:加号是追加的意思,得先有一个,然后才考虑追加。 |
* | 等价于{0,},表示出现任意次,有可能不出现。 记忆方式:看看天上的星星,可能一颗没有,可能零散有几颗,可能数也数不过来。 |
贪婪匹配和惰性匹配
- 惰性匹配:正则
/\d{2,5}/
,默认按照最多的匹配
"12 123 4567 12345".match(/\d{2,5}/g);
// ["12", "123", "4567", "12345"]
1
2
2
- 贪婪匹配:正则
/\d{2,5}?/
,按照最少的匹配
"12 123 4567 12345".match(/\d{2,5}?/g);
// ["12", "12", "45", "67", "12", "34"]
1
2
2
多选分支
一个模式可以实现横向和纵向模糊匹配。而多选分支可以支持多个子模式任选其一。
具体形式如下:(p1|p2|p3),其中 p1、p2 和 p3 是子模式,用|(管道符)分隔,表示其中任何之一。
例如要匹配字符串"good"和"nice"可以使用/good|nice/
"good nice".match(/good|nice/g);
// ["good", "nice"]
1
2
2
分支结构也是惰性的,即当前面的匹配上了,后面的就不再尝试了。