日期:2014-05-16  浏览次数:20365 次

Javascript正则表达式笔记(修正版)

^?????? The caret (^) tells the regular expression that the character must not match the characters to follow.?
??????? 比如要匹配所有除了a或b的字符,字符类可以这么写[^ab]?
^????? 定位符规定匹配模式必须出现在目标字符串的开头?
??????? 那是否说^ 在[ ] 里面 就 表示排除(负向类) , 在[ ] 前面 就表示要在开头 ??
$????? 定位符规定匹配模式必须出现在目标对象的结尾?

-??????? 范围类,如要匹配a到z的所有字母,字符类可以这么写[a-z]?

{n}?? 出现多少次?

/^[0-9]{7}$/??? 匹配的就是一个仅包含7个数字的字符串?


7.1 RegExp 对象可以有一个或两个参数.?
????? var reCat = new RegExp ("cat")????????????????????? //这个表达式只会匹配字符串中出现的第一个"cat"?
????? var reCat = new RegExp ("cat","g")?????????????? //匹配所有出现的"cat"?

???? 正则表达式字面量?
???? var reCat = /cat/gi ;?? 注意字面量不需 要放在引号里?

???? 判断某个字符串是否匹配指定的模式?
???? RegExp.test(str)?????????????????? 如果给定的字符串匹配这个模式,返回true ,否则返回false .?? reCat.test("cat")?? //返回true?

???? RegExp. exec(str)???????????????? 返回一个数组 ,数组中第一个元素是匹配字符串,其他是反向引用 . 如果没有找到匹配,返回null?
?????????????????????????????????????????????? 返回的数组有一个index 属性,这个属性的值 是匹配字符串中第一个字符在原字符串中的下标?
????????????????????????????????????????????? var toMarch6 = "1 3";?
?????????????????????? var regExp6 = /(\d+)\s*(\d+)/;?
?????????????????????? var result = regExp6.exec(toMarch6);?
?????????????????????? dwr(result);//1 3,1,3?
????????????????????????????????????????????? dwr(RegExp.$1 +" "+RegExp.$2);//1 3?
????????????????????????????????????????????? 当正则表达式加上了参数g ,这个正则表达式会从正则表达式对象的lastIndex 属 性指定的位置开始查找,如果找到一个匹配,?
????????????????????????????????????????????? 会将lastIndex 属性设置为匹配字符串后面 一个位置的下标.?
?????????????????????? var toMarch7 = "1 3 4 5";?
?????????????????????? var regExp7 = /(\d+)\s*(\d+)/g;?
?????????????????????? var result7?
?????????????????????? while((result7= regExp7.exec(toMarch7)) !=null){?
???????????????????????? dwr(result7);//分别为1 3,1,3 和 4 5,4,5?
???????????????????????? dwr(regExp7.lastIndex);//分别为3和7?
?????????????????????? }?
???? String.match(reCat)??????????? 返回一个包含在字符串中的所有匹配 的数组?
?????????????????????????????????????????????? var toMatch = "a bat, a cat, a fAt baT, a faT cat";?
?????????????????????????????????????????????? var reAt = /at/gi; //如果不加参数g,返回的数组只会包含一个匹配元素?
?????????????????????????????????????????????? var arrMatchs = toMatch.match(reAt);?
?????????????????????????????????????????????? 返回一个数组["at","at","At","aT","aT","at"]?

???? String.search(reCat)?????????? 与indexOf 类似,返回在字符串中出现的第一个 匹配的位置 ,全局匹配表达式g 在这里不起作 用??? toMatch.search(reAt);//输出3?

???? String.replace(matchStr, replaceStr)??????????????
?????????????????????????????????????????????? 用第二个参数替换 某个子串(第一个 参数)的所有匹配 . 第一个参数 既可以是匹配的字符串 ,也可以是用于匹配的一个正则表达式 ,?
?????????????????????????????????????????????? 返回是替换后的整个字符串?
?????????????????????????????????????????????? var sToChange = "The sky is red";?
?????????????????????????????????????????????? var reRed = /red/;?
?????????????????????????????????????????????? sToChange.replace(reRed,"blue" );??? //输出The sky is blue?????

???? String.split(reCat)????????????? 将字符串分割 成子串,作为数组 返回?
????????????????????????????????????????????? var sColor = "red, blue, yellow";?
????????????????????????????????????????????? var reExp = /\,/;?
????????????????????????????????????????????? var arrs = sColor.split(reExp);??? //得到一个数组["red","blue","yellow" ]?? 注意逗号 在正则表达式有?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 特殊含义 ,这边需要转义????????????????

7.2? 简单模式(元字符 ,字符类 ,量词 )?
元字符????? 11个?? ( ) [] {} \ ^ $ |? ? * + .?????? 要匹配字符串中的元字符,需要转义?? /\^/?
注意var reMark = new RegExp("\\^"); 当正则表达式以非字面量的形式 表示时,所有的反斜杠"\" 都要用两个反斜杠"\\" 来替换.?
因为javascript字符串解析器会按照翻译\n 的 方式尝试翻译\?.为了保证不会出现这个问题,在元字符的前面加上两个反斜杠,?
我们称之为双重转义 .(不太懂这个解释,我的理解是\ 本身也是元字符,先要对它转义得到 "\" ,然后再用这个"\" 对接下来的元字符转义)?
预定义的特殊字符?
\t?
制表符?
\n?
换行符?
\r?
回车符?
\f?
换页符?
\a?
Alert 字符?
\e?
Escape 字符?