RegExp对象

来源:互联网 发布:linux server 版本 编辑:程序博客网 时间:2024/06/08 08:18

1 创建RegExp对象
1.1 构造函数创建

var ajax=new XMLHttpRequest("o","ig");//返回 /o/ig ;

1.2 字面量创建

var ajax=/a/ig;

2 检索方式—-XHR对象提供的方法

2.1 test();

检测字符串中是否包含指定字符,返回布尔值,true包含,false不包含。

例子:

var str="hello world";var reg=/o/ig;console.log(reg.test(str)); // true

2.2 exec();

执行具体的检测,返回一个数组。

例子:

var str="hello world";var reg=/o/ig;console.log(reg.exec(str)); // ["o", index: 4, input: "hello world"]

注意: 通过exec()方法返回的数组,它的长度为1,而不是3。

因为数组中第一项是通过下标存入的值,而后两项是以键值对存在的,通过下标无法获得。(如果想获取数组中的键值对,可以直接 arr.key 获取)

3 RegExp 语法

3.1 A类

\n 匹配一个换行符。

\r 匹配一个回车符。

\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

\t 匹配一个制表符。

3.2 B类

3.2.1 $
匹配输入字符串的结尾位置。

(如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。)

3.2.2 *
匹配前面的子表达式零次或多次。

3.2.3 +
匹配前面的子表达式一次或多次。

3.2.4 .
匹配除换行符 \n 之外的任何单字符。

3.2.5 ?
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。

3.2.6 \
\ 转义符。

例如, ‘n’ 匹配字符 ‘n’。’\n’ 匹配换行符。序列 ‘\’ 匹配 “\”,而 ‘(’ 则匹配 “(“。

3.2.7 ^
匹配输入字符串的开始位置。
当^出现在[]中时,此时它表示 非 的含义。

3.2.8 [ ]
匹配括号中任意一个字符

3.2.9 { }
标记限定符表达式的开始。

3.2.10 |
指明两项之间的一个选择。

例子:下面这行代码表示检测邮箱的格式

var str="12345@qq.com";var reg = /^\w+@[0-9a-zA-Z]{2,5}\.(com|cn|com\.cn|net|edu|org|cc)$/;console.log(reg.exec(str)); //["12345@qq.com","com"index:0,input:"12345@qq.com"] 

3.11 ( ) 分组
标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。

3.10的例子中使用了( ),( )会导致console.log返回的数组中多了一项“com”。想要取得这一项,有一个简单的方法:RegExp.$1。数字1 表示RegExp对象中使用的所有的( )中的第几个。

例子:
如果要将字符串的 world 和 hello 的位置换一下应该怎么做?

var str="world hello";var reg=/^([a-z]+)\s([a-z]+)$/;str=str.replace(reg,"$2 $1"); console.log(str); //"hello world"

第三行代码用str接收一下,是因为字符串方法replace()返回一个新数组,原数组不会被改变,所以要用str接收一下replace方法返回的新数组。replace()方法第一个参数可以传入[String]或者[RegExp]。当传入参数为[RegExp]时,这个正则会自动在调用replace()方法的str中执行(如果需要循环,会自动执行循环的操作)。

练习:

找到字符串中所有的数字用数组输出

            var str = "12 fff 87 er334 233 -=-=fa80";             var reg = /\d+/g;            var arr = [];//创建一个数组,用于接收数据            var result=null;//创建一个变量,留已备用            //用result接收一下reg.exec(str)的结果,并且判断是否存在,存在就继续不存在就停止            while (result = reg.exec(str)){                arr.push(result[0]);//将值添加到数组内            }            console.log(arr);//返回数组

有一个疑问是否可以这样写?

            var str = "12 fff 87 er334 233 -=-=fa80";             var reg = /\d+/g;            var arr = [];            var result= reg.exec(str);            while (result){                arr.push(result[0]);//将值添加到数组内            }            console.log(arr);

result= reg.exec(str) 直接写到while循环外,这样无法得到想要的结果。因为写到外面,reg.exec(str) 只会执行一次,在while循环中会造成无限循环这样的bug,导致页面崩溃。

原创粉丝点击