0%

正则表达式

/*
 * 正则表达式
 *     - 用于定义一些字符串的规则,
 *         计算机可以根据正则表达式,来检查一个字符串是否符合规则,
 *         获取将字符串中符合规则的内容提取出来
 */

创建正则表达式的两种方法

1.构造函数法

var reg = new RegExp("正则表达式","匹配模式");
var reg1 = new RegExp("a");        //检查一个字符串中是否含有a

2.字面量法

var reg = /正则表达式/匹配模式;

正则表达式的方法

test()

/**
* 正则表达式的方法:
*     test()
*         使用这个方法可以用来检查一个字符串是否符合正则表达式的规则
*         如果符合规则则会返回true,否则返回false
*/

exec()

如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。

可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。

var str = "Visit W3School"; 
var patt = new RegExp("W3School","g");
var result;

while ((result = patt.exec(str)) != null)  {
  document.write(result);
  document.write("<br />");
  document.write(patt.lastIndex);
 }

创建一个正则表达式检查一个字符串

/*

* []中的内容也是或的关系

* [ab] == a|b

* [a-z] 任意小写

* [A-Z] 任意大写

* [A-z] 任意字母

* ()    匹配,返回的是字符串,与exec()使用

*/
//检查一个字符串中是否含有abc或者adc或者aec
        reg = /abc|adc|aec/;
        reg = /a[bde]c/;

        /**
         * [^ ] 除了
         */
        reg = /[^ab]/;
        reg = /[^0-9]/;                //除了数字

下面正则表达式中,哪项不匹配( )

  • var reg=/ph+..p/;
    var str="phabp";
  •    var reg=/ph+..p/;
       var str="phhhhp";
  •   var reg=/ph+..p/;
      var str="phhhaap";
  •    var reg=/ph+..p/;
       var str="phhhaaap";

正确选项D

.表示任意字符
如果检查字符串中是否含有.需要用转义符\即\.
注意:使用构造函数时,由于它的参数是一个字符串,而\是字符串中的转义字符,需要使用\\来代替
/**
* \w
*  - 字母、数字、下划线[0-9a-z]
* \W
*  - 除了字母、数字、下划线
* \d
*  - 任意数字[0-9]
* \D
*  - 除了数字[^0-0]
* \s
*  - 空格
* \S
*  - 除了空格
* \b
*  - 单词边界
* \B
*  - 除了单词边界
*/

量词

/**
 * 量词
 *     -    通过量词可以设置一个内容出现的次数
 *     -    量词只对它前边的一个内容起作用
 * 
 *     -    {n}        正好出现n次
 *     -    {m,n}    正好出现m-n次
 *     -    {m,}    正好出现m次以上
 *     -    n+        正好出现1次或者多次,相当于{1,}
 *     -    n*        正好出现0次或者多次,相当于{0,}
 *     -    n?        0个或1个,相当于{0,1}
*/
/**
 * 检查一个字符串是否以a开头
 *     ^    表示开头
 *     $    表示结尾
*/

例如

.* 贪婪匹配
.*?    懒惰模式,是满足条件的情况只匹配一次,即最小匹配.

邮件的正则表达式

/**
 *电子邮箱
 *abc.hello@abc.com.cn
 *    
 *任意的字母数字下划线    .    任意的字母数字下划线    @    字母或数字    .    字母    .字母(不是必要的)
 * /w{3,}    /.    (/w{3,})*    @    [A-z0-9]+    /.    ([A-z]{2-5})+
 *
 */
    var emailReg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
    var email = "abc.hello@163.com";
    console.log(emailReg.test(email));

爬虫中的正则

使用exec()方法

(.*?) 表示匹配的内容,exec返回的数字下标0为匹配的内容,1表示匹配的 第一个(.*?)内容,一次往后推

let str = `<p class="search-index-R"><a href="https://www.1905.com/vod/list/n_1/o3p1.html" class="cur">电影</a><a href="https://www.1905.com/vod/list/n_1_t_1_c_922/o3p1.html" >微电影</a><a href="https://www.1905.com/vod/list/n_2/o3p1.html" >系列电影</a><a href="https://www.1905.com/vod/list/n_1_t_1_c_927/o3p1.html" >纪录片</a><a href="https://www.1905.com/vod/list/n_1_t_1_c_586/o3p1.html" >晚会</a><a href="https://www.1905.com/vod/list/n_1_t_1_c_178/o3p1.html" >独家</a><a href="https://www.1905.com/vod/list/n_1_t_1_c_1024/o3p1.html" >综艺</a><a href="https://www.1905.com/vod/list/n_1_t_1_c_1053/o3p1.html" >体育</a></p>`

let reg = /<a href="(.*?)".*?>(.*?)<\/a>/igs            //s表示匹配换行符
let arrClass = []
while( res = reg.exec(result) ){
    let obj = {
        all: res[0],
        className: res[2],
        url:res[1]
    }
    arrClass.push(obj)
}
console.log(arrClass)