js的正则表达式

正则表达式(regular expression)是一中描述字符模式的对象,js的RegExp类表示正则表达式,String与RegExp都定义了相应的方法来操作正则表达式,比如模式匹配,文本检索和替换等。

正则表达式的定义:
定义正则表达式可以使用RegExp()构造函数来创建RegExp对象。不过RegExp对象最常见的创建形式是通过直接量来实现,就像创建String对象一样: var reg = /s$/;
用RegExp()构造函数也可以构建等价的正则表达式:var reg = new RegExp("s$");
正则表达式的模式规则是有一个字符序列组成,包括数字与字母在内,大多数的字符都是按照字面含义匹配的。比如说正则表达式:/java/可以匹配任何包含java子串的字符串。
除此之外,正则表达式正还有许多表示特殊含义的字符,这些字符是需要大家牢记的。比如:/s$/包含两个字符,第一个字符s按照字面意思匹配,第二个字符是具有特殊含义的元字符,用于匹配字符串的结束,因此这句话的含义就是匹配一个以s结尾的字符串。
直接量字符:
上面提到正则表达式的所有字母与数字都是按照字面含义进行匹配的。同样js的正则表达式还支持非字母的字符匹配。这些字符需要通过反斜线(\)进行转义。比如转义字符\n用以匹配换行符。
如果我们想在正则表达式里匹配这些符号。那么必须使用前缀"\",这是一条通行的规则。其他标点符号没有特殊的含义,和其他字符一样按照字面意思匹配。
js的正则表达式_第1张图片
字符类:
将直接量字符单独放在方括号内就构成了字符集。一个字符集可以匹配它所包含的任意字符。因此,正则表达式/[a,b,c]/,就和字母"a","b","c"中的任意一个都匹配。
js的正则表达式_第2张图片
var pattern = /[a-z]oogle/;
alert(pattern.test("google"));  //  返回为true
var st1 = /[0-9]aaa/;
alert(st1.test("45baaa")); //  返回为false  
alert(st1.test("45aaafgd"));   //  返回为true
重复:
js的正则表达式_第3张图片
var pattern =/go{3}gle/;   //限定 o 为三个
var pattern2=/go{2,4}gle/;   //限定 o 为2 到4 个
var pattern3=/go{3,}gle/;    //限定o为  3个 或者 3个以上

var d='google';
alert(pattern.test(d));   //false
alert(pattern2.test('goooogle'));   //true
alert(pattern3.test('gooooogle'));   //true
var pattern =/[a-z]+/;      //贪婪模式
var str='ddfdfds';

alert(str.replace(pattern,1)); //1    //只会 匹配到 第一个  将第一个 替换掉

pattern=/[a-z]/g; //进行全局匹配

alert(str.replace(pattern,1));     //1111111

//使用 非贪婪模式
pattern =/[a-z]+?/;
alert(str.replace(pattern,1));   //1dfdfds
选择,分组,引用:
js的正则表达式_第4张图片
 选择实例:
var pattern =/box|\w+oogle/;  //字符串匹配到 'box' 或者 '\w+oogle'都会返回 true
alert(pattern.test('box'));       //true
alert(pattern.test('shigggoogle'));   //true
分组实例:
 var pattern3 =/google{4,8}/;    //代表 匹配 e字符 4到 8 次
            var str3='googleeeee';

            alert(pattern3.test(str3));    //true

            var pattern4=/(google){4,8}/;    //表示 匹配  google  4到 8 次
            alert(pattern4.test('googlegooglegooglegoogle'));//true
var pattern =/8(.*)8/;
var str='This is a 8google8';
//只要匹配 一次就可以;;不管是怎样的  匹配
//pattern.test(str);

str.match(pattern);//和上面 一样,,下面也能够 取到  分组匹配到的 字符串

//上面两种任意一种方式还要是匹配,之后就可以通过下面 取到第一分组 匹配到的字符串。
alert(RegExp.$1);     //google

var str2='You are a 8shit8'; 
document.write(str2.replace(pattern,'<strong>$1</strong>')); //$1 取出 匹配到的 分组字符串

演示将 'google baidu'  两个单词位置调换

var pattern2=/(.*)\s(.*)/;
var str='google baidu';
alert(str.replace(pattern2,'$2 $1'));  //将 他们的 位置 调换 
指定匹配位置:
js的正则表达式_第5张图片
var pattern =/^[0-9]oogle/;  //^  位于 匹配字符串的 开头  代表 匹配字符串的 匹配是 从 字符串的  开头开始的
            alert(pattern.test("4444oogle"));  //false  因为是 从 最前面的 那个 4 进行匹配的
            alert(pattern.test("4ooglehuhu")); //  true  因为是从第一个是数字
            alert(/^[0-9]+oogle/.test("4444oogle"));  //true   +  代表是 1个 或 多个

//全局控制
            var pattern2=/^\woogle$/;    //^讲开头控制住,,$将结尾控制住,,所以 就是全局控制,,,\w 代表 匹配 数字字母和_ 
var pattern2 =/google\b/;    //\b 代表是否到达结尾;;;就是e 是否是 最后一个字符
            var str2='googleeeee';
            var pat3 = /\bgoogle/;
            alert(pat3.test(str2));  //  true
            alert(pattern2.test(str2));    //false
            alert(pattern2.test('google'));  //true
修饰符:
js的正则表达式_第6张图片
 
 
用于匹配模式的String方法:
String支持4种正则表达式的方法,最简单的是search(),他的参数是一个正则表达式。返回第一个与之匹配的子串的起始位置,如果找不到起始的位置,则返回值为-1.如果search的参数不是正则表达式,则首先会通过RegExp()构造函数将他转换成正则表达式。search()不支持全局索引,因为他会忽略掉正则表达式中的g。
 math()函数:
function getRE()
        {
            var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
            var text = " Visit my blog at http://www.log.com/~liwei";
            var result = text.match(url);
            if(result!=null)
            {
                var full = result[0];
                var protocol = result[1];
                var host = result[2];
            }
        }

exec()函数

 function test()
        {
            var pattern = /java/g;
            var text = "JavaScript is more fun than Java!";
            var result;
            while((result = pattern.exec(text)) != null)
            {
                alert("Matched"+result[0]+","+"at position"+result.index+";next search begins at "+pattern.lastIndex);
            }
        }

 

你可能感兴趣的:(正则表达式)