您的位置:首页 > Web前端 > JavaScript

[javascript权威指南][阅读笔记]八

2016-07-17 15:19 197 查看
第十章   正则表达式的模式匹配

正则表达式是一个描述字符模式的对象
使用正则表达式可以进行强大的模式匹配以及文本的检索和替换
RegEx直接量和对象的创建:ES3规范,用正则表达式创建的RegExp对象会共享一个实例,ES5则是两个独立的实例
直接量字符:\o Nul字符;\t 制表符;\n 换行符;\v 垂直制表符;\f 换页符;\r 回车符;\xnn 由十六进制数nn指定的拉丁字符;\uxxxx 由十六进制数xxxx指定的unicode字符;\cX 控制字符^X
字符类:将直接量字符单独放进方括号内就组成了字符类(character class)。一个字符类可以匹配它所包含的任意字符
可以通过^符号来定义否定字符类,它匹配所有不包含在方括号内的字符
[...]    ——方括号内的任意字符
[^...]   ——不在方括号内的任意字符
.         ——除换行符和其他unicode行终止符之外的任意字符
\w       ——任何ASCII字符组成的单词,相当于[a-zA-Z0-9]
\W      ——任何不是ASCII字符组成的单词,相当于[^a-zA-Z0-9]
\s        ——任何unicode空白符
\S        ——任何非unicode空白符的字符,注意区分\w和\S
\d        ——任何ASCII数字,相当于[0-9]
\D       ——除了ASCII数字之外的任何字符,相当于[^0-9]
[\b]    ——退格直接量(特例)
注意,方括号内也可以写这些特殊转义字符,退格符特例
重复
{n,m}:匹配前一项n次,但不能超过m次
{n,}:匹配前一项n次或更多次
{n}:匹配前一项n次
?:匹配前一项0或1次,相当于{0,1}
+:匹配前一项1或多次,相当于{1,}
*:匹配前一项0或多次,相当于{0,}
非贪婪的重复:以上匹配都是尽可能多的匹配,称之为贪婪匹配。也可以进行非贪婪匹配,只需在正则表达式后边加上一个问号?
选择、分组和引用:指定选择项 + 子表达式分组 +引用前一子表达式的特殊字符
|:选择,匹配的是左边或右边的子表达式
(...):组合,将几个项组合成一个单元,单元可通过*,+,?,|等符号修饰,而且可以记住和这个组合相匹配的字符串以供此后的引用使用
(?:...):只组合,不记忆
\n:和第n个分组第一次匹配到的字符相匹配,组是圆括号中的子表达式,也有可能是嵌套的
选择项的尝试匹配次序是从左到右
正则表达式中的圆括号的作用:1、把单独的项组合成子表达式;2、在完整的模式中定义子模式;3、允许在同一正则表达式中引用前面的子表达式
通过在\后加一位或多位数字,如\1引用的是第一个带括号的子表达式。注意,子表达式可以嵌套子表达式,所以它的位置是参与计数的左括号的位置
正则表达式不允许双引号内容中包含单引号,反之亦然
指定匹配位置
^:匹配字符串的开头,在多行的检索中,匹配一行的开头
$:匹配字符串的结尾,在多行的检索中,匹配一行的结尾
\b:匹配一个单词的边界
\B:匹配非单词边界的位置
(?=p):零宽正向先行断言
(?!p):零宽负向先行断言
修饰符
i:执行不区分大小写的匹配
g:执行全局匹配,即找到所有匹配
m:多行匹配模式,^和$匹配一行或字符串的开头或结尾
用于模式匹配的String方法
search():返回第一个匹配的子串的起始位置或-1。若参数不是正则,则转换为正则。不支持全局检索,忽略修饰符g
replace():检索和替换。$加数字可以替换相应的子表达式匹配的文本。第二个参数可以是函数
match():返回完整匹配和子表达式匹配
split():拆分成数组
RegEx对象:exec()和test()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息