js正则表达式详解

  简介

 正则表达式是一种可以用于模式匹配和替换的强有力的工具。替换文本,可以在文档
    中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。
    根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。

基本语法
    /love/ 其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。 

    出现的次数 
    “+”    规定其前导字符必须在目标对象中连续出现一次或多次。
    “*”    规定其前导字符必须在目标对象中出现零次或连续多次。
    “?”    规定其前导字符必须必须在目标对象中连续出现零次或一次。
    如:/fo+/ 因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”,“fo”,
               或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。
 /eg*/ 因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”,“ego”,
        或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。
 /Wil?/ 因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”,或者
        “Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。
     
    {n}    n是一个非负整数。匹配确定的 n 次。
    {n,}   n是一个非负整数。至少匹配 n 次
    {n,m}  m和n均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
    如:/jim {2,6}/ 规定字符m可以在匹配对象中连续出现2-6次
    注意:以上特殊符号匹配的是紧挨着该符号前的单个字符。

    字符匹配  
    \s:用于匹配单个空格符,包括tab键和换行符;
    \S:用于匹配除单个空格符之外的所有字符;
    \d:用于匹配从0到9的数字;
    \w:用于匹配字母,数字或下划线字符;
    \W:用于匹配所有与\w不匹配的字符;
    . :用于匹配除换行符之外的所有字符。

    定位符   
    “^”  定位符规定匹配模式必须出现在目标字符串的开头
    “$”  定位符规定匹配模式必须出现在目标对象的结尾
    “\b” 定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一
    “\B” 定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内, 即匹配对象既
         不能作为目标字符串的开头,也不能作为目标字符串的结尾。
    注意:当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,
   则应当被视做定位符。 
    如:/^hell/  可以与目标对象中以 “hell”, “hello”或“hellhound”开头的字符串相匹配。
        /ar$/   可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。
 /\bbom/ 可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。
 /man\b/ 可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。
     
    范围
    /[A-Z]/  与从A到Z范围内任何一个大写字母相匹配。
    /[a-z]/ 与从a到z范围内任何一个小写字母相匹配。
    /[0-9]/  与从0到9范围内任何一个数字相匹配。
    如:  /([a-z][A-Z][0-9])+/ 与任何由字母和数字组成的字符串,可以与“aB0”等相匹配。
   
    “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中
    “|”:类似编程逻辑中的“或”运算
    “\”:转义符。

使用实例
 在JavaScript 1.2中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配
     操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回true或false。
     我们可以使用JavaScript编写以下脚本,验证用户输入的邮件地址的有效性。     
     <script language="Javascript1.2">
      function verifyAddress(obj) {    
        var email = obj.email.value;
        var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;  
        flag = pattern.test(email);
        if(flag)       
        {  alert(“Your email address is correct!”);        
     return true;       
        }else
        { alert(“Please try again!”);  
       return false;  
        } 
       }        
     </script>

正则表达式对象
      语法 1 re = /pattern/[flags]
      语法 2 re = new RegExp("pattern",["flags"])
      参数
   re 必选项。将要赋值为正则表达式模式的变量名。
          Pattern 必选项。要使用的正则表达式模式。如果使用语法 1,用 "/" 字符分隔模式。
           如果用语法 2,用引号将模式引起来。
          Flags  可选项。如果使用语法 2 要用引号将 flag 引起来。标志可以组合使用。
   g(全文查找出现的所有 pattern)
   i(忽略大小写)
   m (多行查找)
  
search 方法
    返回与正则表达式查找内容匹配的第一个子字符串的位置。 stringObj.search(rgExp)

 参数
 stringObj 必选项。要在其上进行查找的 String 对象或字符串文字。
 rgExp  必选项。包含正则表达式模式和可用标志的正则表达式对象。
 说明
    search 方法指明是否存在相应的匹配。如果找到一个匹配,search 方法将返回一个整数值,
    指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,则返回 -1。
 示例
       function SearchDemo()
       { var r, re; // 声明变量。
         var s = "The rain in Spain falls mainly in the plain.";
  re = /falls/i; // 创建正则表达式模式。
  r = s.search(re); // 查找字符串。 return(r);}
 返回值:18

exec 方法
     用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。rgExp.exec(str)

 参数
   rgExp 必选项。包含正则表达式模式和可用标志的正则表达式对象。
   str 必选项。要在其中执行查找的 String 对象或字符串文字。

 说明
   如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组,
   并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配,而第1到
   n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match方法。
   如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有
   设置全局标志,exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。exec方法返回的数
   组有三个属性,分别是 input、index 和 lastIndex。Input 属性包含了整个被查找的字符串。
   Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。LastIndex 属性中包含了匹
   配中最后一个字符的下一个位置。
 示例 
  function RegExpTest() {
     var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
     if (ver >= 5.5){ // 测试 JScript 的版本。
  var src = "The rain in Spain falls mainly in the plain.";
  var re = /\w+/g; // 创建正则表达式模式。
  var arr;
  while ((arr = re.exec(src)) != null)
           document.write(arr.index + "-" + arr.lastIndex + arr + "\t");
      } else{ alert("请使用 JScript 的更新版本"); }
    }

 返回值:0-3The 4-8rain 9-11in 12-17Spain 18-23falls 24-30mainly 31-33in 34-37the 38-43plain

test 方法
     返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。rgexp.test(str)

 参数
   rgexp 必选项。包含正则表达式模式或可用标志的正则表达式对象。
   str 必选项。要在其上测试查找的字符串。
 说明
   test 方法检查在字符串中是否存在一个模式,如果存在则返回 true,否则就返回 false。
   全局 RegExp 对象的属性不由 test 方法来修改。

 示例  
 function TestDemo(re, s)
 { var s1;
   if (re.test(s))  s1 = " contains ";
   else s1 = " does not contain ";  return("'" + s + "'" + s1 + "'"+ re.source + "'"); 
 }

match 方法
     使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。stringObj.match(rgExp)

 参数
 stringObj 必选项。对其进行查找的 String 对象或字符串文字。
 rgExp    必选项。为包含正则表达式模式和可用标志的正则表达式对象。也可以是包含正则表达式模式
         和可用标志的变量名或字符串文字。
 说明
     如果 match 方法没有找到匹配,返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的
   属性以反映匹配结果。match 方法返回的数组有三个属性:input、index 和 lastIndex。Input 属性包
   含整个的被查找字符串。Index 属性包含了在整个被查找字符串中匹配的子字符串的位置。LastIndex属
   性包含了最后一次匹配中最后一个字符的下一个位置。如果没有设置全局标志 (g),数组的 0 元素包含
   整个匹配,而第 1 到 n 元素包含了匹配中曾出现过的任一个子匹配。这相当于没有设置全局标志的exec
   方法。如果设置了全局标志,元素 0 到 n 中包含所有匹配。

 示例  
  function MatchDemo() {
  var r, re;
  var s = "The rain in Spain falls mainly in the plain";
  re = /ain/i; // 创建正则表达式模式。
  r = s.match(re); // 尝试匹配搜索字符串。
  return(r); // 返回第一次出现 "ain" 的地方。 }
 返回值:ain

 示例
 function MatchDemo() { var r, re;
 var s = "The rain in Spain falls mainly in the plain";
 re = /ain/ig; //带i和g标志
 r = s.match(re); // 尝试去匹配搜索字符串。
 return(r); // 返回的数组包含了所有 "ain" // 出现的四个匹配。 }
 返回值:ain,ain,ain,ain  
 var r, re = "Spain"; r = "The rain in Spain".replace(re, "Canada"); return r;
 返回值:The rain in Canada


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值