javascript高级程序设计(第三版)学习笔记(一) 正(2)


alert(/^居$/.test("居")); // 只限一个 居 true
alert(/^居$/.test("居居")); // 只限一个 居 false
alert(/\b啊/.test("a啊")); // true 思考一下:为什么这个和下面的结果不一样??
alert(/\b啊/.test("-啊")); // false
alert(/\B啊/.test("a啊")); // false
alert(/\B啊/.test("-啊")); // true


alert(/\b啊/.test("a啊")); 中,"a"和"啊"之间存在一个\b,因为\b的左边是"a",右边是"啊",所以能够匹配,为true;
相反:alert(/\b啊/.test("-啊")); 中,"啊"的左边有个\b,但是\b的左边是"-",不是单词字符,所以,不能匹配,为false
7、预定义类: \d \D \s \S \w \W .
\d 表示0-9的数字字符,相当于 [0-9]
\D 表示非0-9的数字字符,相当于 [^0-9]

复制代码 代码如下:


alert(/\d/.test("1"));//true
alert(/\D/.test("1"));//false


\s 空白字符,相当于 [\n\r\f\t\x0B ] ,注意空格也算
\S 非空白字符,相当于 [^\n\r\f\t\x0B ]

复制代码 代码如下:


alert(/\s/.test(" "));//true,空格也算
alert(/\S/.test("\n\r\f\t\x0B "));//false
alert(/\S/.test("\n\r\f\t\x0B \\"));//true


\w 单词字符,相当于 [a-zA-Z0-9_]
\W 非单词字符,相当于 [^a-zA-Z0-9_]

复制代码 代码如下:


alert(/\w/.test("afdas"));//true
alert(/\W/.test("afdas"));//false


(点). 表示除了\n和\r意外的任意字符,相当于 [^\n\r]

复制代码 代码如下:


alert(/./.test("\n\r"));//false ,只有这两个,其他的都能够被 . 匹配
alert(/./.test(" "));//true


8、RegExp实例方法:exec() test() match()
exec():返回第一个匹配项信息的数组,没能匹配成功返回null,用法:pattern.exec(str); 需要注意有没有"g"的不一样

复制代码 代码如下:


var re1 = /([a-z]*)bbb/;//贪婪
document.write(re1.test("abbbaabbb1234")+"<br />");//true
document.write(re1.exec("abbbaabbb1234")+"<br />");//abbbaabbb,abbbaa,这里贪婪匹配到abbaabbb,然后$1为abbbaa,所以此时返回abbbaabbb,abbbaa
var re1 = /([a-z]*)bbb/g;//贪婪
document.write(re1.test("abbbaabbb1234")+"<br />");//true
document.write(re1.exec("abbbaabbb1234")+"<br />");//null //因为设置了g标识,并为贪婪匹配,而上面的test已经贪婪匹配到abbbaabbb,后面只有1234,所以此时匹配不到,返回null


test():在只需要知道是否匹配,不需要知道具体匹配什么文本的情况下,使用这个放个比较方便,用法:pattern.test(str);

复制代码 代码如下:


var re1 = /([a-z]*)bbb/;//贪婪
document.write(re1.test("abbbaabbb1234")+"<br />");//true
document.write(re1.test("abbbaabbb1234")+"<br />");//true
document.write(re1.test("abbbaabbb1234")+"<br />");//true
var re1 = /([a-z]*)bbb/g;//贪婪
document.write(re1.test("abbbaabbb1234")+"<br />");//true
document.write(re1.test("abbbaabbb1234")+"<br />");//false 要理解这里为什么是false,因为设置了g,那么这次的匹配是从1开始的
document.write(re1.test("abbbaabbb1234")+"<br />");//true


match():这个函数比较特别,在设置g和不设置的情况下,表示形式完全不一样,在未设置g的情况下,表现形式和exec一样,设置了g的情况下,将返回所有匹配到的值的集合,用法:str.match(pattern)

复制代码 代码如下:


var re1 = /([a-z]*)bbb/;//贪婪
document.write("abbbaabbb1234".match(re1)+"<br />");//abbbaabbb,abbbaa 这里的abbbaabbb是匹配到的整个字符串,abbbaa是匹配第一个小括号的字符串
var re1 = /([a-z]*)bbb/g;//贪婪
document.write("abbbaabbb1234".match(re1)+"<br />");//abbbaabbb,在设置了g后,match()返回所有匹配到的值


最后,exec()和未设置g的match(), 最后返回的数组的第一个元素是整个匹配的字符串,如果模式中存在小括号,那么第二个元素是第一个括号的匹配内容,以此类推,第三个、第四个。。。比如:

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wfydfg.html