代码改变世界

js正则表达式

2012-03-10 16:55  臭小子1983  阅读(308)  评论(0编辑  收藏  举报

正则表达式在线测试:http://www.chinacxy.com/regex.htm

 

一、正则的写法

  1、var reg = /写到这里/;    

  2、var reg = new RegExp(//, i);    // 参1:要匹配的正则, 参2,是写高级匹配 如:/\d/i;   得写成 var reg = new RegExp(/\d/, i);  

 

二、正则的规则

标点符号:^    $    .    *    +    ?    =    !    :    |    \    /    ()    []    {}  

标志:i:不区分大小定匹配    g:全局匹配,找到所有匹配,而不是在找到第一个后就停止    m:多行模式

 

1、^:匹配前开头  如:^as 

2、$:匹配结尾     如:as$

3、. :任意一个字符匹配

4、*:重复0次或多次  如:as*   与{0,}相同

5、+:重复1次或多次   如:as+  与{1,}相同

6、? :重复0次到1次   如:as?   与{0,1}相同

7、=:

8、! :

9、:

10、|:选择,匹配左边的或者右边的表达式   如/ab|cd|ed/    匹配as,或者cd,或者ed

11、\\:转意字符

12、():把单独的项目组合成子表达式    如/java(script)?/  匹配java,script可以有也可以没有

 

特殊符号

/[abc]/

位于括号内的任意字符,例如:/[abc]/和字母a,b,c中的任何一个都匹配,正则表达式也支持布尔值,因此/[abc]/相当于/a|b|c/,/[0-9a-z]/:匹配任何一个0到9和a-z的字符

[^abc]

/[^abc]/除括号内的字符其它都匹配

.

匹配除换行符之外的所有字符

\w

匹配字母,数字或下划线字符,相当于[a-zA-Z0-9_]

\W

匹配非字母,数字或下划线字符,等于[^a-zA-Z0-9_]

\s

匹配单个空格符,包括tab键和换行符

\S

匹配除单个空格符之外的所有字符

\d

任何ASCII数字,等于[0-9]

\D

任何非ASCII数字,等于[^0-9]

\b

定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一

\B

定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾



重复

/abc*/

重复0次或多次,/abc*/与ab,abc,abccc都匹配

/abc+/

重复1次或多次,/abc+/与ades,sab,sdsc

/?/

重复匹配0次或一次

{n}

/\d{3}/:匹配当三位数以0-9开头

{m,n}

/\d{2,4}/:匹配一个字符的2-4位是否是0-9数字

{m,}

/\d{6,}/:匹配一个长度超过五位以0-9,不包含终止符的字符串

 

选择、分组和引用

()

可以通过括号来对表则表达式进行分组

例:/([‘“])[^’”]*\1/

我们可以通过括号来对正则表达式进行分组,分组作用:一是可以让重复模式作用于整个组而不是单一字符,二是可以用特殊转义序来对其引用,

/^Script/

字符串开头匹配,如:/^Script/匹配字符串ScriptJava,不匹配JavaScript,

与[^Script]是有区别的.

/Script$/

字符串结尾匹配,如:/Script$/不匹配字符串JavaScript.

\b

定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一

(?!\:)

 

 

 

高级模式匹配

g

匹配全局,找出被检索字符串的所有匹配

i

匹配是忽略大小写,/Java/i:与java、Java、JaVa、jAvA都匹配

m

进行多模式匹配,针对多行字符串,匹配每行中的内容,而不是把换行作为字符串的结束,/^JavaScript/gm:匹配

“JavaScript属性,取得字符串,构建正则表达式.再验证其值.如果通过验证就

提交,如是数据不合法”

 

 

三、使用方法:

1、test():reg.test(str); 返回一个布尔值,如果查找成功返回true,否则返回false

 1 <script>
 2     var str = "央企工资引各方艳羡基层员工喊冤:偏高的是:管理层";
 3     var reg = /基层员工/;
 4     
 5     if(reg.test(reg)){
 6         console.log("匹配成功");    
 7     }
 8     else{
 9         console.log("匹配失败");    
10     }
11 </script>

 

2、search():返回查找到匹配的位置,如果没有匹配到,返回-1.    例:str.search(/asb/);

 1 <script>
 2     var str = "央企工资引各方艳羡基层员工喊冤:偏高的是管理层";
 3     var reg = /:/;
 4     var index = str.search(reg);
 5     if(index === -1){
 6         alert("没有找到位置")
 7     }
 8     else{
 9         alert(index);          // 返回15
10     }
11 </script>

 

3、replace():执行检索与替换操作,第一个参为正则表达式,第二个参为要替换的字符,也可以是一个回调函数.    例:str.replace(/asb/, "bbbbbbbbbbbbb");

1 <script>
2     var str = "三中全会汪峰投资者带来什么汪峰告白全解(图)美广播公司就辱华言论道歉 独家:为何华汪峰抗议";
3     var reg = /汪峰+/g;            // 如果不加g只匹配第一个替换掉如果加g将全局匹配
4     
5     str = str.replace(reg, "aa");
6     console.log(str);
7 </script>

 

回调函数

 1 过滤前:<input type="text" id="after" style="width:500px" value="专家称以房养老最大风险以房养老是房价 应借鉴国外以房养老多元化以房养老模式"><br>
 2 过滤后:<input type="text" id="befor" style="width:500px" value=""><br>
 3 <input type="button" id="btn" value="过滤">
 4 
 5 <script src="../js/jquery-1.7.2.min.js"></script> 
 6 <script>
 7     var staticVal = $("#after").val();
 8     var beforVal = $("#befor");
 9     var btn = $("#btn");
10     var reg = /以房养老+/g;
11     var overVal = "";
12     
13     btn.click(function(){
14         overVal = staticVal.replace(reg, function(str){
15             var result = "";
16             for(var i=0; i<str.length; i++){
17                 result += "*";
18             }
19             return result;          // 把结果返回
20         })
21         beforVal.val(overVal);
22     })
23 </script>

 

4、match():若不匹配: 返回null        若匹配:返回数组(如果正则包含“g”,数组元素分别为匹配的字符串; 如果不包含,则返回首次匹配的子字符串,以及属性input和index)

1 <script>
2     var str = "ah123sd55jk246asldhlas789";
3     var reg = /\d+/g;            // 如果不加g只匹配第一个替换掉如果加g将全局匹配
4     var arr = [];
5     arr = str.match(reg);
6     console.log(arr);
7 </script> 

 

四、常用正则

1、除去两边空格:

1 function trim(str){
2   var reg = /^\s+ | \s+$/g;
3   return str.replace(reg, "");
4 }

 

2、/^\d+$/      非负整数;

3、/^[1-9]\d+$/    正整数(除了0之外的整数);

4、/^((-\d+)|(0+))$/ 非正整数(0和负整数);

5、/^-[1-9]\d+$/        负整数(非0和非整正数);

6、/^[a-zA-Z]+$/       由26个英文字母组成的字符串 ;

7、/^[A-Z]+$/     由26个英文字母的大写组成的字符串

8、/^[a-z]+$/     由26个英文字母的小写组成的字符串 

9、/^[A-Za-z0-9]+$/ 由数字和26个英文字母组成的字符串 

10、/^\d+$/      由数字、26个英文字母或者下划线组成的字符串 

11、/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/    //email地址 

12、/^http[s]{0,1}(\:\/\/)(\w+\.)+((com(\.cn){0,1})|org|net)$/  匹配URL网址

13、/[\u4e00-\u9fa5]/    是否存在中文

14、/<(\S*?)[^>]*>.*?</\1>|<.*? />/  匹配HTML标记

15、/^[a-zA-Z]\w{5-16}/      匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)

16、/^\d{3}-\d{8}$|^\d{4}-\d{7}/          国内电话号码 匹配010-12345678 或者0454-1234567

17、/^[1-9]\d{4,}/                匹配腾讯QQ号 1-9开头,后面跟四位以上的数字

18、/[1-9]\d{5}(?!\d)/    匹配中国邮政编码

19、身份证

20、IP验证0-255 如192.168.0.1

 1 <script>
 2     // 0-255.0.0.0
 3     var reg = /^\d+$/;
 4     var ip = "235.0.";
 5     var separate = ip.split(".");
 6     var isRight = true;
 7 
 8     function checkIP(){
 9         for(var i=0; i<separate.length; i++){
10             if(!reg.test(separate[i]) || parseInt(separate[i]) < 0 || parseInt(separate[i]) > 255){
11                 alert("不正确");
12                 return false;
13             }
14         }
15         alert("正确")
16     }
17 
18     checkIP();
19 </script>