笔记:JS权威指南11章—Javascript正则表达式
正则表达式(Regular expression)是一种描述字符模式的对象,Javascript的RegExp类表示正则表达式,而String和RegExp都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数
正则表达式的重复字符:可以匹配尽可能多的字符
{n, m}匹配前一项至少n次,但是不能超过m次
{n, }匹配前一项n次,或者更多次
{n}匹配前一项n次
? 匹配前一项0次或1次,等价于{0, 1}
+匹配前一项1次或多次,等价于{1,}
*匹配前一项0次或多次,等价于{0,}
非贪婪的重复:在重复字符后加问号(如: ??, +?, *?, {1,4}?)
选择:选择项是从左到右考虑,直到发现了匹配项,如果左边的选择项匹配,就忽略右边的选择项,即使它产生更好的选择项。
模式/a|ab/应用到字符串”ab”上时,它只匹配第一个字符。
在正则表达式中括号具有几种作用:
一个作用是把单独的项目组合成子表达式,以便可以想处理独立的但愿那样用|, *, +或?等来处理他们;
另一个作用是在完整的模式中定义子模式;
/([‘”])[^‘”]*\1/ 匹配一对单引号或者一对双引号,\1匹配的是第一个带括号的子表达式所匹配的模式
正则表达式的标志:
I : 执行不区分大小的匹配
g : 执行一个全局匹配
m : 多行匹配,^匹配一行的开头和字符串的开头,$匹配一行的结尾和字符串的结尾
search:以正则表达式为参数(如果不是正则表达式,则传递给RegExp转换成正则表达式),返回第一个与之匹配的子串的开始字符的位置,如果没有匹配的字符,返回-1。Search不支持全局搜索
"JavaScript".search(/script/i);//4
match:参数是正则表达式(如不是,则转换),返回包含匹配结果的数组
"2 plus 5 equals 7".match(/\d+/g);// ["2", "5", "7"]
split:把调用它的字符串(或正则表达式)分解为一个子串数组,返回数组
"123,456,789".split(",");//["123", "456", "789"] "1,2, 3, 4 ,5".split(/\s*,\s*/);//["1", "2", "3", "4", "5"]
RegExp类:第一个参数为包含正则表达式主体的字符串,第二个参数是可选的,为g/i/m。当将正则表达式作为字符串直接量传递给RegExp构造函数时,必须用\\替换所有的\字符。
var zipcode = new RegExp(“\\d{5}”,’g’);
exec:对一个指定的字符串执行一个正则表达式即在一个字符串中检索匹配,如果没找到,返回null,如果找到,返回一个数组。
var pattern = /Java/g; var text = "Javascript is more fun than Java!"; var result; while((result = pattern.exec(text) )!= null){ alert("Matched '" + result[0] + "'" + "at position " + result.index + "; next search begins at " + pattern.lastIndex); }
test:另一个RegExp方法,参数是一个字符串,如果这个字符串包含正则表达式的一个匹配,返回true。
var pattern = /java/i; pattern.test("JavaScript");//true