javaScript正则——RegExp:javascript
RegExp有个test()方法、若是给定字符串(只有一个参数)匹配这个模式、它就返回true、不然返回false。
正则表达式中/i,/g,/ig,/gi,/m的区别和含义
/i (忽略大小写)
/g (全文查找出现的全部匹配字符)
/m (多行查找)
/gi(全文查找、忽略大小写)
/ig(全文查找、忽略大小写)java
- var str = "jfkd@s,laj@fd,safd@saf,ds@";
- var res = /@/gi; //全文查找@
- alert(res.test(str)); //输出:true
exec()方法、有一个字符串参数、返回一个数组。数组的第一个条目是第一个匹配、其它的是反向引用。正则表达式
- //aStr只包含第一个实例、就是"jfkd@sla"中的@
- var aStr = res.exec(str);
- alert(aStr);
String对象有个match()方法、它会返回一个包含在字符串中的全部匹配的数组。数组
- alert(str.match(res)); //输出:@,@,@,@
另外一个叫作seartch()的字符串方法的行为与indexOf()有些相似、可是它使用一个RegExp对象而非仅仅一个子字符串。Search()方法返回在字符串中出现的一个匹配的位置。ide
- //它从字符的索引[0]的位置开始查找
- alert(str.search(res)); //输出:4
replace():函数
- /**
- * replace()、它能够用另外一个字符串(第二个参数)来替换某个子串(第一个参数)的全部匹配
- */
- var sRep = str.replace("@","瘦马");
- alert(sRep); //输出:jfkd瘦马s,laj@fd,safd@saf,ds@
- /**
- * 也能够将正则表达式看成第一个参数
- */
- alert(str.replace(res,"瘦马")); //输出:jfkd瘦马s,laj瘦马fd,safd瘦马saf,ds瘦马
- /**
- * 也能够指定一个函数做为replace的第二个参数
- */
- var sFun = str.replace(res,function(){
- return "瘦马";
- });
- alert("---------------"+sFun); //输出:jfkd瘦马s,laj瘦马fd,safd瘦马saf,ds瘦马
- /**
- * split()
- */
- alert(str.split("@"));
- //使用正则表达式、也能够实现相同功能
- alert(str.split(/@/));
- <!-- 一个replace方法处理的只能输入数字的示例 -->
- <input size="25" value="" id="maxnum" name="tbmeetroom.maxnum"
- onkeyup="this.value=this.value.replace(/\D/g,'')"
- onafterpaste="this.value=this.value.replace(/\D/g,'')" />
表达式中全部元字符必须进行转义(在前面加上反斜杠)才能正确匹配。元字符是正则表达式语法的一部分、下面是正则表达式用到的全部元字符:( [ { \ ^ $ | ) ? * + .所以想要匹配一个问号、则:var reTest = /\?/;或者这样表示:var reTest = new RegExp("\\?");第二行使用两个反斜杠、称之为双重转义。this
字符类:spa
- <script type="text/javascript">
- //简单类——匹配"bat"、"cat"和"fat"
- var sToMatch = "a bat, a Cat, a fAt baT, a faT cat";
- var reBatCatRat = /[bcf]at/gi;
- var arrMatches = sToMatch.match(reBatCatRat);
- //alert(arrMatches);
- /**
- * 负向类——他能够指定要排除的字符。
- * 例如、要匹配除了a和b的全部字符、那么这个字符类就是[^ab]。
- * 脱字符号(^)告诉正则表达式字符不能匹配后面跟着的字符。
- * 前面的例子、若是只想获取包含at但不能以b或c开头单词:
- */
- reBatCatRat = /[^bc]at/gi;
- arrMatches = sToMatch.match(reBatCatRat);
- //alert(arrMatches);
- /**
- * 范围类——要匹配全部的字母表中的字符、可是又实在不想逐个输入、
- * 可使用:[a-z]。里面的横线(-)、它的意思是"从什么到什么"(a到z)
- * 这里a-z仅仅匹配了小写字母、除非使用i选项来指明不区分大小写
- * 若是要仅仅匹配大写字母则使用:[A-Z]
- * 取得以一、二、三、4结尾、number开头的字符
- */
- sToMatch = "number1,number2,number3,number4,number5,number6,number7,number8,number9";
- reBatCatRat = /number[1-4]/gi; //或者使用负向类 /number[^5-9]/gi
- arrMatches = sToMatch.match(reBatCatRat);
- //alert(arrMatches);
- /**
- * 组合类——由其余的类组合而成的字符类。
- * 假设要匹配全部从a~m的字母以及从1-4的数字、以及一个换行符
- * [a-m1-4\n]
- * javaScript/ECMAScript不支持某些其余正则表达式实现中的联合类和交叉类。这意味着你不能有相似
- * [a-m[p-z]]或者[a-m[^b-e]]这类的模式出现
- */
- /**
- * 预约义类
- 代码 等同于 匹配
- . [^\n\r] 除了换行和回车以外的任意字符
- \d [0-9] 数字
- \D [^0-9] 非数字字符
- \s [ \t\n\x0B\f\r] 空白字符
- \S [^ \t\n\x0B\f\r] 非空白字符
- \w [a-zA-Z_0-9] 单词字符(全部的字母、全部的数字和下划线)
- \W [^a-zA-Z_0-9] 非单词字符
- 想匹配三个数字
- */
- sToMatch = "325 fds2";
- reBatCatRat = /\d\d\d/; //或者使用负向类 /number[^5-9]/gi
- alert(reBatCatRat.test(sToMatch));
- </script>