正则表达式

正则表达式的一些方法:

test方法:查找字符串中是否匹配正则表达式,如果匹配返回结果是:true,否则返回false;形式:reg.test(str)

exec方法:查找匹配的正则表达式

     如果匹配的话返回结果是一个数组,数组0元素是整个的匹配,1-n元素是各个子匹配,数组有三个属性:

      input:返回整个字符串,

      index:返回匹配的子字符串在整个字符串的位置

      lastIndex:返回匹配的子字符串最一个字符的下一个字符

    如果不匹配的话返回的是值是null

    有全局识志(g)与没有全局标识符的话,区别很大,第一次调用的话返回The,第二次调用返回rain,第三次调用返回in...,如果没有的话不管调用多少

    次返回的都是the,

        var src = "The rain in Spain falls mainly in the plain.";
        var re = /\w+/g;    
        var arr;
        alert(src.match(re))//有g的话,返回[The,rain,in,Spain,falls,mainly,in,the,plain.]如果没有g的话则返加[The]

        var u="http://msdn.microsoft.com:80/scripting/default.htm";
        var s=/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
        var a=s.exec(u);
        for(i=1;i<a.length;i++){
            alert(a[i]);
        }//这个数组的每个元素是各个分组中的内容,有g没g都一样

match方法:结果是返回一个数组,如果有全局标识符的话,有g的话,返回[The,rain,in,Spain,falls,mainly,in,the,plain.]如果没有g的话则返加[The],形

      式:str.match(reg)

search方法:返回匹配的的字符串的首字符在整个表达式中的偏移位置,如果不匹配的话则返回-1,形式:str.search(reg),有没有全局标识符都一样

split()方法:结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解。separator 不作为任何数组元素的部分返回。有个例外的地方:

      <textarea id="txtArea"></textarea>

      <script language="javascript">
        $("#txtArea").click(function(){
              alert(document.getElementById("txtArea").value.split(/(\n|\r)/g).length)
      })
      </script>

      正则表达式中有分组时则将匹配的结果也作为数组的一部分返回,匹配的空格也作为数组一部分返回,正确形式:/\n|\r/g,

以下是常用的一些匹配规则:

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)(像vbscript那样的trim函数)
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
以下是例子:
利用正则表达式限制网页表单里的文本框输入内容:
用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,")"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,"))"

1.用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,")"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,"))"

2.用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,")
“onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,"))"

3.用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,")
“onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,"))"

4.字符串的replace:

str.replace(/(<(\w+)[^>]*?\/>)/g,function(all, front, tag){})这个是匹配标签符例<div/>,all表示总个匹配,front表示第一个分组,tag表示第二个分组

5.cookie中取值

reg = /(?:^|;)cookieName([^;]*)/

6.url中取值

reg = /[?&]keyName=([^&]*)/

7.className的变换

document.getElementById('aa').className += 'className'

document.getElementById('aa').className =

document.getElementById("MyElement").className.replace(/(?:^|\s)MyClass(?!\S)/,'');
posted @ 2010-11-26 19:38  xiaoxiaohui  阅读(232)  评论(0编辑  收藏  举报