var str = '2013-6-7'; var re = /(\d+)(-)/g; str = str.replace(re,function($0,$1,$2){ $1 + '.'; //分别返回2013. 6. }); alert( str ); //2013.6.7 //整个过程就是利用子项把2013- 6- 分别替换成了2013. 6. 最终弹出2013.6.7
match方法也会返回自己的子项,如下:
var str = 'abc'; var re = /(a)(b)(c)/; alert( str.match(re) ); //[abc,a,b,c]( 返回的是匹配结果 以及每个子项 当match不加g的时候才可以获取到子项的集合)
补充:exec()方法:和match方法一样,搜索符合规则的内容,并返回内容,格式为数组。
用法:正则.exec(字符串);
属性:input(代表要匹配的字符串)
栗子:不是全局匹配的情况:
var testStr = "now test001 test002"; r = ""; var r = re.exec(testStr) alert(r);// test001 001 返回匹配结果,以及子项 alert(r.length); //2 返回内容的长度 alert(r.input); //now test001 test002 代表每次匹配成功的字符串 alert(r[0]); //test001 alert(r[1]); //001 代表每次匹配成功字符串中的第一个子项 (\d+) alert(r.index ); // 4 每次匹配成功的字符串中的第一个字符的位置
全局匹配:如果是全局匹配,可以通过while循环 找到每次匹配到的字符串,以及子项。每次匹配都接着上次的位置开始匹配
var testStr = "now test001 test002"; var re = /test(\d+)/g; var r = ""; (r = re.exec(testStr)){ alert(r);//返回每次匹配成功的字符串,以及子项,分别弹出 :test001 001,test002 002 alert(r.input); //分别弹出: now test001 test002 now test001 test002 alert(r[0]); //代表每次匹配成功的字符串 分别弹出: test001 test002 alert(r[1]); //代表每次匹配成功字符串中的第一个子项 (\d+) 分别弹出:001 002 alert(r.index ); // 每次匹配成功的字符串中的第一个字符的位置,分别弹出:4 12 alert(r.length); //分别弹出:2 2 }
[] : 表示某个集合中的任意一个,比如 [abc] 整体代表一个字符 匹配 a b c 中的任意一个,也可以是范围,[0-9] 范围必须从小到大 。
[^a] 整体代表一个字符 :^写在[]里面的话,就代表排除的意思
例子:匹配HTML标签 比如<div>hahahah </div> 找出标签<div></div>
re = /<[\w\W]+>/g; //匹配左括号 中间至少一个字符或者非字符的内容,然后匹配右括号
// 其实就是找到左括号,然后中间可以有至少一个内容,一直到找到右括号就代表是一个标签。
转义字符
\s : 空格
\S : 非空格
\d : 数字
\D : 非数字
\w : 字符 ( 字母 ,数字,下划线_ )
\W : 非字符
.(点)——任意字符
\. : 真正的点
\b : 独立的部分 ( 起始,结束,空格 )
\B : 非独立的部分
关于最后两个来看个栗子:
var str = 'onetwo'; var str2 ="one two"; var re = /one\b/; // e后面必须是独立的 可以是起始,空格,或结束 alert( re.test(str) ); //false alert( re.test(str2) );//true
例子:写一个用class名获取节点的函数:
我们之前可能见过这样的函数:
function getByClass(parent,classname){ if(parent.getElementsByClassName){ return parent.getElementsByClassName(classname); } else{ elems = parent.getElementsByTagName("*"); for(var i =0;i<elems.length;i++){ if(elems[i].className==classname){ results.push(elems[i]); } } return results; } }