RegExp对象:正则表达式
1.建立语法
1.1.字面量法
例如:var reg = /word/igm;
1.2.构造函数法 new RegExp('345oiu','img') new RegExp(/\d/ig)windows
2.修饰符
2.1.i表示忽略大小写
2.2.g全文查找
2.3.m数组
3.直接量字符
例如:字符o,\n等。函数
4.字符类
又叫字符集合,语法[直接量字符若干] 例如:[abc]或者[范围] [a-z0-9]字符类中的任意单个字符可以与某个子字符串匹配,那么就认为整个字符类与该子字符串匹配。对象
5.反义
5.1.[……]与[^……]
参见: ^
注意:脱字符(^)必须出如今字符类中的第一个字符位置时,才表示反义,不然,只表示脱字符自己。
5.2.\d与\D
\d表明任意单个阿拉伯数字。\D表明任意单个非阿拉伯数字。
5.3.\w与\W
\w任意单个单词字符。\W任意单个非单词字符。单词字符指的是:阿拉伯数字、英文字母、下划线( _ )。
5.4.\s与\S
\s表示任意单个非打印字符。\S表示任意单个可见字符。
5.5.\b与\B
\b表示单词边界。\B表示非单词边界。注意:单词边界是个位置,不是空格或其它字符字符串
6.转义
6.1.正则中的捺斜杠(\)一般有特殊语法。
例如:\d表示单个阿拉伯数字,并不表示一个斜杠和一个字母d;又如:\w表示任意单个单词字符,也不表示一个斜杠和一个字母w。
6.2.转义的语法:在要被转义成普通字符的字符的左侧添加捺斜杠。
例如:var reg = /\/ig;可以匹配捺斜杠自己。input
7.限定符
用于限制限定符左侧紧挨着的单个字符(或子表达式)重复的次数。
7.1.?
表示紧挨着它的左侧的单个字符出现0次或1次。
7.2.+
表示紧挨着它的左侧的单个字符出现至少1次。
7.3.*
表示紧挨着它的左侧的单个字符出现至少0个,最多不限。
7.4.{n}
n表示大于或等于零的整数,{n}表示紧挨着它的左侧的单个字符或子表达式出现n次。
7.5.非贪婪模式
匹配时尽量少的占用字符。只要关闭了贪婪模式,就进入了非贪婪模式。关闭贪婪模式的方法是:在限定符的后面加一个问号(?)便可。string
8.定位符
8.1.^
参见: [……]与[^……]
在单行模式下,表示字符串的开始位置。注意,并非第一个字符,而是第一个字符的左边的位置。在多行模式下,表示字符串的开始位置和一行的开始位置。
8.2.$
在单行模式下,表示字符串的结束位置。注意,并非最后一个字符,而是最后一个字符的右边的位置。在多行模式下,表示字符串的结束位置和一行的结束位置。
8.3.\b
单词边界。
8.4.\B
非单词边界。it
9.选择与分组
9.1.分组
用一对小括号包围的模式,就被编为了一组。例如:var reg = /(zo)+/ig;其中zo被编为一组,被后面的限定符总体限定。
9.2.选择
就是“或者”的意思。用“|”表示。例如:构造函数
10.子表达式 通过分组后,每一个组都看作是一个“子表达式”。
10.1.捕捉
捕捉的意思是:当每次发生与整个正则表达式匹配的时候,都在匹配项中存在与子表达式匹配的项,这些项通常称为“子匹配”,这些子匹配默认会被自动保存(保存在一个称为“全局正则表达式对象”的属性中),把子匹配自动保存的过程,就被称为捕捉。被捕捉的子匹配能够在后续程序中使用。
在父字符串查找匹配子字符(字表达式)叫作捕捉,存在了RegExp全局对象属性($1~$9,
$1~$9里面存的值是默认空字符串)中
如:'nregrt好啊'.replace(/<(\w+)>.*<\/\1>/ig,'你好')=>你好好啊;
\1表示后向引用 \1 === ,\1引用的$1里面的值;每次匹配都会更新$里面的值
10.2.非捕捉:
当仅想给正则表达式分组,而不想捕捉子匹配时,那么就要关闭捕捉功能。作法是在小括号中开头部分写好英文的问号和冒号。例如:var reg = /^0?1(?:3|4|5|7|8)\d{9}$/ig;中的小括号就是非捕捉性的子表达式
11.后向引用:
在正则表达式的模式中,用 \1 表示对第一个子匹配的引用,用 \2 表示对第二个子匹配的引用, \3表示第三个……例如:/(\w+).*\1/中的 \1 就表示对左边小括号中的子表达式的引用。可是,若是没有捕获子匹配,那么这些 \1 , \2 ,\3 ……等就不表明后向引用。
12.全局RegExp对象及其$x属性
13.预查
13.1.正向预查:
又叫零宽正向先行断言。例如:var reg = /windows(?=\d+)/;可以匹配后面跟着若干数字的windows,却不能匹配后面没有数字的windows。注意:只匹配windows,而不匹配后面的数字,因此预查不消耗字符。
13.2.负向预查
又叫零宽负向先行断言。例如:var reg = /windows(?!\d+)/;可以匹配后面没有数字的windows,却不能匹配后面跟着若干数字的windows。注意:只匹配windows,而不匹配后面的数字,因此预查不消耗字符。
14.正则匹配三原则
14.1.从左往右
14.2.贪婪模式
14.3.尽可能匹配
用英文句点(.)表示除换行符(\n)以外的任意单个字符。
要匹配包括换行符在内的任意单个字符,建议用[\s\S]表示
注意:不要将全局 RegExp 对象与 正则表达式 对象混淆。尽管听起来像是一回事,但它们是大相径庭的。全局 RegExp 对象的属性包含不断更新的关于每一个匹配出现的信息,而正则表达式对象只包含出现正则表达式匹配的信息。
支持正则表达式的 String 对象的方法方法:
search 检索与正则表达式相匹配的值。返回值:父串或reg匹配的子串的起始位置。
匹配不到return -1; 参数为空: return 0
match 在父中找到一个或多个正则表达式的匹配或在父字符串内检索指定的值,
返回指定的值(一个数组); 没有找到任何匹配的文本将返回 null
参数为空 返回 0:'',length:1;input:原对象
replace 替换与正则表达式匹配的子串。
split 把字符串分割为字符串数组。
regExp对象的方法:
exec(string)方法用于检索字符串中的正则表达式的匹配。和match方法类似 找到了匹配的文本,则返回一个结果数组。不然,返回 null
new RegExp('op','img').exec('opop');op是否存于opop中