Java Script 正则表达式入门(二)

如果你已经看了第一篇文章,那么你已经明白了什么是正则表达式了,那么今天让我们更深入的学习Java Script 中的正则表达式。


三、Java Script中的正则表达式基础语法:
  为了更清晰的学习这些东西,让我们从以下几个方面分别介绍:
  1、匹配模式:
     匹配模式应该算是正则表达式的精华了。他表达了你的要求(别忘了你对漂亮MM的评价标准,哈哈)。如果你要验证一个字符串是否符合某种格式,那么匹配模式就表达了你要验证的字符串需要符合那种标准。如果你要检验一段长本文中是否包含某种格式的子字符串,那么匹配模式就代表了你要查找的字符串的格式。如果你要从一段文本字符串中将符合某种格式的字符串用另一个字符串替换掉,那么,匹配模式就代表了将要被替换掉的字符串必须符合的标准...(真罗嗦)。
     那么在Java Script中如何定义一个模式呢?
     在Java Script中有两种定义模式的方式,但现在我只告诉你第一种最常用的方式,另一种等我睡完觉,学会了在告诉你,呵呵
   最常用的定义一个匹配模式的方法:
            
var regObj = /.../[flags];
    
那么,现在regObj就是一个正则表达式对象了。看准了!以/开始,再以/结束,两边可没有单引号和双引号。中间省略掉的的是什么呢?告诉你,那是精华:模式。
   来看看微软的定义说明吧:
 
re = /pattern/[flags]     re
  必选项。将要赋值为正则表达式模式的变量名。
   Pattern
  必选项。要使用的正则表达式模式。
  flags
  可选项。标志可以组合使用,可用的有:
     g (全文查找出现的所有 pattern
     i (忽略大小写)
     m (多行查找)
  你看到了,
他没用var和结束符“;”,我觉得使用var和“;”会让你的程序更加清晰明了。当然不用也是合法的,但合法并不一定是好的。就像你找MM,身高:符合,PP:符合。。。都符合了,但就是没感觉。。哈哈。。惨了吧。。
     
罗嗦了半天还没说到点子上呢。我自己都困了。。
     现用几个小例子,来说说几个常用的模式里东西吧,要是说多了,不光你会晕,我也会弄不清楚的。等说完了正则表达式如何使用模式时,你应该才有兴趣关心这些陈谷子烂芝麻的东西。好了闲话越来越多了。For examples:
      The First:    var numberPattern = /^/d*$/;//验证一个字符串必须全是数字的模式。
         description:^代表了一个字符串的开始;$代表了一个字符串的结束;/d用来匹配一个阿拉伯数字;*是说可以匹配/d多次。总起来说就是从一个字符串的开始到结束,里面必须是零个或多个数字。当然你也可以写成这样/^[0-9]*$/,如果你看不明白,那可能是你比较困了,睡会在来看。再看一种最愚蠢的方式:/^[0|1|2|3|4|5|6|7|8|9]*$/。“|”用在这里是蠢了点,但要用到其它地方他还是挺聪明的,不信在看下一个:
     The Second:
   var monthPattern = /^[0|1]?/d$/
  看懂了吗?表示一个月份的数字必须为1-12种的一个数字,当然允许你写成:09。这里的“|”应该说挺聪明的。?:代表匹配0次或1次。
   不再举例子了,等我写完这篇文章后我会把我的一个常用库贴到这里来,保你拿下来就管用。

  2、正则表达式对象:
     你已经看到第一种定义正则表达式的方法了,现在我来告诉你第二种定义方法,看:
       var regObj = new RegExp(“pattern”[,“flags”]);//注意双引号,不可丢。
    参数的意思不言而喻了。这里定义的regObj和用第一种方式定义的那个完全一样。
    既然是个对象我们就应该研究研究它的属性和方法了,先看属性:
    哈哈,只有两个,怕什么呢:
     1)lastIndex:根据微软的解释他应该只属于RegExp对象,可能是文档的作者搞错了吧。
     2)source:返回正则表达式模式的文本的复本。只读。
    这么简单,再看看方法:
     1)compile(pattern[,flags]):方法把 pattern 转换为内部的格式,从而执行得更快。例如,这使得可以在循环中更有效地使用正则表达式。当重复使用相同的表达式,那么编译过的正则表达式使执行加速。然而,如果正则表达式改变了,这种编译毫无益处。(这种速度的提高是你那四只小眼睛看不到的)。干脆我直接告诉你,把这个方法忘了吧!
    2)test(str):你已经见识了,返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。在进行模式验证时你会常用到的。
    3)exec(str):让微软给你讲讲吧,保证能把你讲晕:
      功能:用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。
      说明:如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组,并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志,exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。exec 方法返回的数组有三个属性,分别是 inputindexlastIndexInput 属性包含了整个被查找的字符串。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 + "/t" + arr);
  }
  else{
    alert("请使用 JScript 的更新版本");
  }
}
 
上面这些如果你一看就明白,说明你比我聪明的多。我是被讲晕了。
  至于到底为什么我们先不说,先看看运行结果:
0-3 The4-8 rain9-11 in12-17 Spain18-23 falls24-30 mainly31-33 in34-37 the38-43 plain
  如果你也晕了,那末让我给你诊断诊断:
     1)没看懂他所谓的“数组”是什么意思?
     2)还不知道模式中的标志g什么意思?
     3)不知道模式中的标志/w和+什么意思?
     4)等等等等。。。(当然最关键是微软口齿不清!)
   下面让我来给你再解释解释,让你从晕到睡着!

  3、RegExp对象:
  4、String对象对正则表达式的支持

  5、模式匹配的语法细则:
四、深入理解语法:
五、正则表达式的高级应用:
六、补序:正则表达式的历史
(太晚了,该回家了,明天续)
正则表达式验证 java script 验证大全 部分: 下面都是我收集的一些比较常用的正则表达式,因为平常可能在表单验证的时候,用到的比较多。特发出来,让各位朋友共同使用。呵呵。 匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^x00-xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的正则表达式:ns*r 评注:可以用来删除空白行 匹配HTML标记的正则表达式:]*>.*?| 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力 匹配首尾空白字符的正则表达式:^s*|s*$ 评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式 匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)* 评注:表单验证时很实用 匹配网址URL的正则表达式:[a-zA-z]+://[^s]* 评注:网上流传的版本功能很有限,上面这个基本可以满足需求 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 评注:表单验证时很实用 匹配国内电话号码:d{3}-d{8}|d{4}-d{7} 评注:匹配形式如 0511-4405222 或 021-87888822 匹配腾讯QQ号:[1-9][0-9]{4,} 评注:腾讯QQ号从10000开始 等等..............................
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值