/*
正则表达式
JS 对正则表达式的支持是通过ECMAScript中的RegExp类实现的。
RegExp对象的构造函数可以带一个或两个参数。
第一个参数(或只有一个参数)是描述需要进行匹配的模式字符串,
如果还有第二个参数,这个参数则指定了额外的处理指令。
**/
/**
* 最基本的正则表达式就是一个普通的字符串。
* 例如:要匹配单词"cat",可以定义如下的正则表达式:
* */
var reCat = new RegExp("cat");
/**
* 带第二个参数的正则表达式,g->global的缩写,表示要搜索字符串中出现的全部"cat",
* 而不是在找到第一个匹配后就停止。
* 如果还要让模式不区分大小写,可以给第二个参数添加字符i->insensitive的缩写
* 如下所示:
*/
var reCat = new RegExp("cat",'gi');
var reCat = /cat/gi;//两个等价
/*
1.test()方法
判断字符串是否匹配,如果有一个匹配都返回true
用法如下:
*/
var str = 'cat';
var regCat = /cat/;
console.log(regCat.test(str));//true
/**
* 2. exec()方法
* 返回一个数组,数组中的第一个条目是第一个匹配,其他的反向引用
* 用法如下:
*/
var str = 'cat bat oat ttdcccccatdddAt';
var regCat = /at/gi;
console.log(regCat.exec(str));//["at", index: 1, input: "cat bat oat ttdcccccatdddAt", groups: undefined]
/**
* 3. match()方法
* 返回一个包含在字符串中所有的匹配的数组
* 这个方法跟上面两个方式的使用方式不同:
* 这个方法调用string对象,同时传给它一个RegExp对象;
* 用法如下:
* **/
var str = 'cat bat oat ttdcccccatdddAt';
var regCat = /at/gi;
console.log(str.match(regCat));//["at", "at", "at", "at", "At"]
/**
* 4. replace()方法
* 该方法也可以接受正则表达式作为第一个参数,
* 也可以用另一个字符串作为第二个参数来替换某个字串(第一个参数的所有匹配项)
* 第二个参数也可以是一个函数,函数里面接受一个参数,即匹配了的文本,该函数返回进行替换的文本
* **/
var str = "the sky is red, flower is red.";
var regStr = /red/g;
console.log(str.replace("red", "blue"))//"the sky is blue, flower is red."
console.log(str.replace(regStr, "blue"))//"the sky is blue, flower is blue."
var strResult = str.replace(regStr, function(sMatch){return "blue"})
/***
* 5. split()方法(将字符串转换为数组)
* 该方法可以将字符串分割成一系列字串并通过一个数组将它们返回,
* 用法如下:
* **/
var sColor = "red,blue,yellow,green";
var regComma = /\,/;
var arrColors = sColor.split(",")// ["red", "blue", "yellow", "green"]
var arrColors = sColor.split(regComma)// ["red", "blue", "yellow", "green"]
/**
* 正则表达式进阶篇
* **/
/**
* 1. 元字符:( [ { ^ $ | ) ? * + . ,
* 任何时候要在正则表达式中使用这些元字符,都必须对它们进行转义,
* 如,要匹配一个问号,正则表达式应该这样表示:
*
* **/
var reQMark = /?/;
/***
* 2. 使用特殊字符
* 可以通过直接使用字符来表示它们本身,也可以使用它们的ASCII代码或者Unicode代码指定字符
* 特殊字符如下:
* ===>制表符;
===> 换行符;
===> 回车符; f ===> 换页符
* e ===> escape字符; cX ===> 与X相对应的控制字符; ===> 回退符
* v ===> 垂直制表符;