JS中的正则表达式

JS中之正则表达式

<script type="text/javascript">

        /*
        var str = 'abc@abc.com';

        //1.正则表达式对象
        //var reg = new RegExp('\\w+@\\w+\\.\\w+');

        //声明正则表达式对象的另外一种方式。
        var reg = /\w+@\w+\.\w+/; // (推荐)

        var b = reg.test(str); //相当于c#中的IsMatch();//返回布尔类型
        alert(b);

        function chkAge(cur) {
        var reg = /\d+/;
        var b = reg.test(cur.value);
        alert(b);
        }
        */

        var str = '中国移动10086.中国联通10010,中国电信10000中国工商银行95588;

        //g表示全局模式
        //就是每次提取的时候从上一个提取出继续向后找,而不是每次都从索引0开始找。
        var reg = /\d\d\d(\d\d)/g;

        /*
        //exec返回值为一个数组
        //result是一个数组,该数组中
        //存储的第0个元素是,匹配的结果
        //第1个元素是第一个提取组的结果
        //第2个元素师第2个提取组的结果
        //依次类推
        var result = reg.exec(str);
        for (var i = 0; i < result.length; i++) {
        alert(result[i]);
        }


        var result1 = reg.exec(str);
        alert(result1);

        var restul2 = reg.exec(str);
        alert(restul2);
        */

        //循环提取字符串中的所有满足匹配的正则表达式。
        while (true) {
            var result = reg.exec(str);
            if (result != null) {
                for (var i = 0; i < result.length; i++) {
                    alert(result[i]);
                }
            } else {
                break;
            }
        }
</script>

JavaScript中创造正则表达式类的措施:
1.var regex = new RegExp(“\\d{5}”) 或者

2.var regex = /  \d{5}  /
/表达式/ 是JavaScript中特别为简化正则表达式编写而提供的语法,写在//中的正则表达式就甭管转义符了。

RegExp对象的办法:
(1)test(str)判断字符串str是否匹配正则表达式,相当给c#中IsMatch

var regex = /.+@.+/;
alert(regex.test("a@b.com"));//true
alert(regex.test("ab.com"));//false

(2)exec(str)进行搜寻匹配,返回值为配合配结果(*),相当于c#中match()和matches()
假如 exec()
找到了配合的文本,则赶回一个结出数组(完全配合的字符串以及提取组的结果)。否则,返回
null。 要提取多只待数调用exec()类似于matches()方法。
于非全局模式下,调用一次exec()相当给match();在全局模式下连续数调用相当给matches()

RegExp 对象
RegExp 对象表示正则表达式,它是本着字符串执行模式匹配的兵不血刃工具。
直接量语法
/pattern/attributes 创建 RegExp 对象的语法:
new RegExp(pattern, attributes); 参数
参数 pattern 是一个字符串,指定了正则表达式的模式要其它正则表达式。
参数 attributes 是一个可选的字符串,包含属性 “g”、”i” 和
“m”,分别用于指定全局匹配、区分轻重缓急写的相当与多行匹配。ECMAScript
标准化之前,不支持 m 属性。如果 pattern
是正则表达式,而不是字符串,则要看看略该参数。
返回值
一个新的 RegExp 对象,具有指定的模式和标志。如果参数 pattern
是正则表达式而非是字符串,那么 RegExp() 构造函数将因此和指定的 RegExp
相同之模式以及标志创建一个新的 RegExp 对象。
要无用 new 运算符,而将 RegExp() 作为函数调用,那么它的表现和用 new
运算符调用时同样,只是当 pattern 是正则表达式时,它只是回去
pattern,而不再创建一个初的 RegExp 对象。

exec() 方法的职能非常有力,它是一个通用的措施,而且采用起来呢较 test()
方法与支持正则表达式的 String 对象的方式更复杂。
要是 exec() 找到了配合的公文,则回一个结实往往组。否则,返回
null。此数组的第 0 只因素是暨正则表达式相配合的文本,第 1 独要素是同
RegExpObject 的第 1 个子表达式相匹配的文书(如果有话),第 2
独因素是和 RegExpObject 的第 2
个头表达式相兼容的文书(如果有话),以此类推。除了数组元素以及 length
属性之外,exec() 方法还回去两独特性。index
属性声明的凡匹配文本的率先只字符的位置。input
属性则存放的是被寻找的字符串 string。我们可看得出,在调用非全局的
RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match()
返回的数组是同之。
唯独,当 RegExpObject 是一个大局正则表达式时,exec()
的作为就是有些复杂一些。它见面在 RegExpObject 的 lastIndex
属性指定的字符处开始物色字符串 string。当 exec()
找到了与表达式相配合的公文时,在相当后,它以把 RegExpObject 的 lastIndex
属性设置为配合配文本之末梢一个字符的产一个职位。这就是说,您可经过反复调用
exec() 方法来举历字符串中的具有匹配文本。当 exec()
再为查找不至相当的文本时,它用返回 null,并将 lastIndex 属性重置为 0。

string的正则表达式方法

String对象被提供了有跟正则表达式相关的方式,相当给对RegExp类的包,简化调用:
match(regexp),非全局模式下一定给调用exec(),全局模式下一定给调用c#的matches(),返回数组中是怀有的相当结果(不含提取组的音讯)。

var s = "aaa@163.com";
var regex = /(.+)@(.+)/;
var match = s.match(regex);
alert(RegExp.$1 + ",服务器:" + RegExp.$2);
字符串.replace(/(正)则/g,”要替换的字符串$1”);//替换手机号码,只显示后4位。手机尾号为:*******1234

 

<script type="text/javascript">
        var str = "赶快拨打13888888888查话费。13999999999送话费。15888888888定业务。";
        //将所有的手机号码前七位都替换成*
        str = str.replace(/\d{7}(\d{4})/g, '*******$1');
        alert(str);

        /*
        //提取所有的手机号码
        //match方法直接调用相当于非全局模式
        //全局模式需要在正则表达式的后面加个g
        //通过字符串的match方法快速提取字符串中的匹配。(不要忘记全局模式)
        var result = str.match(/(\d{3})\d{4}(\d{3})/g);

        //如果正则表达没有加g(全局模式),则match()方法返回结果为一个数组
        //里面包含当前提取的字符串以及,字符串提取组的的信息
        //但是,当加了g的时候,match()方法返回的结果虽然也是数组,但是里面不再包含提取组的信息了
        //而是变成了,所有匹配正则表达式的提取的字符串信息
        alert(result);

        //RegExp.$1获取第一个提取组的信息
        //RegExp.$2获取第二个提取组的信息
        //RegExp.$3...依次类推,//当使用g(全局模式时,该提取组的形式只能获取最后一个组信息)
        //要想获取每个提取组的信息,请用正则表达式对象.exec()方法。
        alert(RegExp.$1 + ',' + RegExp.$2);
        */
</script>