Javascript 正则表达式总结

正则表达式是一串字符,用于在文本字符串中进行查找和替换。javascript正则表达式主要用来验证客户端的输入数据。

一.js中创建正则表达式的2种方法:

1.字面量方式

正则表达式是包含在一对斜杠之间的字符,在结束斜杠后,是用于修饰检索模式的可选参数,它们是:

i:忽略大小写

g:全局匹配

m:多行匹配

 var reg =/abc/
 var reg2=/abc/ig

2.构造函数方式

var reg = new RegExp("abc");
var reg = new RegExp("abc","ig");
二.测试正则表达式

1.test()方法:如果被查找的字符串包含正则表达式中表示的模式,返回true,否则返回false。

  <script type="text/javascript">
      var str = "time to study";
      var regex = /tud/;
      if (regex.test(str)) {
          alert("found!");
      } else {
          alert("no match!");
      }
  </script>
2.exec()方法:如果匹配失败,返回null,否则返回包含和正则表达式匹配的字符串的数组

如果执行exec方法的正则表达式没有分组(没有括号括起来的内容),那么如果有匹配,他将返回一个只有一个元素的数组,这个数组唯一的元素就是该正则表达式匹配的第一个串;如果没有匹配则返回null。

exec如果找到了匹配,而且包含分组的话,返回的数组将包含多个元素,第一个元素是找到的匹配,之后的元素依次为该匹配中的第一、第二...个分组。

分组在下面介绍。

三.String的正则表达式方法

String类提供了4个使用正则表达式的方法

match返回表达式中的子串或者null
replace(regex,replacement)用replacement替换regex
search(regex)返回字符串中regex的开始位置
split(regex)从字符串中以给定的表达式分割出子字符串数组

match:

    <script type="text/javascript">
         var matchArray = new Array();
         var str = "I love the small of clover";
         var regex = /love/g;
         matchArray =  str.match(regex);
         document.write("found: " + matchArray.length);       
     </script>
输出:found: 2

search:

     <script type="text/javascript">
         var str = "I love the small of clover";
         var regex = /love/;
         var index = str.search(regex);
         document.write("found at pos: " + index);       
     </script>
输出:found at pos: 2

replace:

  <script type="text/javascript">
      var str = "abc;abcc;abccc";
      var regex = /;/;
      var splitArr = new Array();
      splitArr =  str.split(regex);
      for (var i=0; i<splitArr.length; i++) {
          document.write(splitArr[i]+"<br/>");
      }
   </script>
输出:

abc
abcc
abccc

split:

      <script type="text/javascript">
          var str="111,222,333";
          var arr=str.split(",");         
          for (var i in arr)
              document.write(arr[i] + "<br/>");
      </script>
输出:

111
222
333

四.正则表达式的匹配

1.元字符:

.查找单个字符,除了换行和行结束符
\w查找单词字符
\W查找非单词字符
\d查找数字
\D查找非数字字符
\s查找空白字符
\S查找非空白字符
\0查找null字符
\n查找换行符
\f查找换页符
\r查找回车符
\t查找制表符
\v查找垂直制表符
\xxx查找以八进制数 xxx 规定的字符
\xdd查找以十六进制数 dd 规定的字符
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符

匹配:字符串中包含一个大写N,后面是任意2个字符,再接al

      <script type="text/javascript">
          var str="Normal";
          var regex=/N..mal/;
          var arr=str.split(","); 
          alert(regex.test(str));       
      </script>

匹配:数字6后面接2个数字的字符

var regex=/6\d\d/;

2.方括号:匹配一个范围内的字符

[a-z][0-9]匹配括号中的字符集中的任意字符
[^a-z][0-9]匹配不在括号中的字符集中的任意字符


匹配:包含至少一个A~Z的大写字母,后面是a~z的小写字符,最后是eve

var regex=/[A-Z][a-z]eve/;

"Believe"不匹配,"BeLieve"可以。

匹配:至少包含A~Z,a~z,0~9,下划线中的一个字符的字符串

var regex = /[A-Za-z0-9_]/;
匹配:不含数字的字符串

var regex = /[^0-9]/;


3.重复模式

x?至多一个x
(xyz)?至多一个xyz模式
x*0个或者多个x
(xyz)*0个或者多个xyz模式
x+1个或者多个x
(xyz)+1个或者多个xyz模式
x{m,n}至少m个或者至多n个x
x{m} m个x
x{m,} 至少m个x


匹配:1位小数或者整数

var regex=/\d.?\d/;
4.锚元字符

如果要从行,字,字符串开始或者结束处匹配,需要用锚元字符。

^从行首或者字符串开始处匹配
$从行尾或者字符串末尾处匹配
\b匹配字符边界
\B匹配非字符边界

匹配:以Abc作为行首的字符串

var regex=/^Abc/;
匹配:字符串以J或者K开头

var regex=/^[JK]/
匹配:字符串以M结尾

var regex=/M$/;

匹配:查找以love开头和结尾的词

var regex=/\blove\b/;
\b匹配的是词边界而非特定字符,"I love u"匹配成功,因为love是单词love的开头。

5.或模式:包含可选模式匹配

匹配:TOM或者JIM

var regex=/TOM|JIM/;
6,分组和聚合:

将一组字符放在括号内就实现了分组

匹配:Tom Jerry,Jim Jerry或者Nick Jerry

var regex= /^(Tom|Jim|Nick) Jerry/;
如果没有括号,就匹配Tom,或者Jim或者Nick Jerry

7.记录或捕获

如果一个正则表达式中包括分组,如果匹配成功,第一个分组会被记录在RegExp的$1对象中,第二个分组记录在$2中,依此类推。

      var str = "Tom Jerry";
          var regex=/(Tom)\s(Jerry)/;
          var arr = str.match(regex);
          document.write(RegExp.$1);
          document.write("<br/>" + RegExp.$2);
输出:

Tom

Jerry 
稍微修改一下代码,验证“exec如果找到了匹配,而且包含分组的话,返回的数组将包含多个元素,第一个元素是找到的匹配,之后的元素依次为该匹配中的第一、第二...个分组。"

      <script type="text/javascript">
      var str = "Tom Jerry";
          var regex=/(Tom)\s(Jerry)/;
          var arr = str.match(regex);
          alert(arr[0]);
          alert(arr[1]);
          alert(arr[2]);
      </script>
分别弹出的是:Tom Jerry, Tom, Jerry

五.一些例子

检查邮政编码:

<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=GBK">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title></title>
  <script type="text/javascript">
      function checkZipCode(zipcode) {
         var regex = /^\d{6}$/;

         if (regex.test(zipcode.value)==false) {
            alert("邮政编码必须是6个数字");
            zipcode.focus();
            return false;
         }
      }
  </script>
  </head>
  <body>
      <form name="zipform" action="">
         <input type="text" name="zipcode" size=6 />
         <input type="button" value="check" onClick="checkZipCode(zipform.zipcode);"> 
      </form>
  </body>
</html>
删除多余空格和破折号

      <script type="text/javascript">
          var str="111  222 -11";
          var regex=/[ -]+/g;
          var newStr=str.replace(regex,"!");
          alert(newStr);
      </script>
删除非数字

      <script type="text/javascript">
          var str="111(222_)11&&";
          var regex=/\D/g;
          var newStr=str.replace(regex,"");
          alert(newStr);
      </script>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值