正则表达式常用知识点总结

正则表达式 :

① 利用某种模式去匹配一类字符串的公式,

② 所有的字符串或数组的处理都可以使用正则进行简化处理


var str = 'dsdfdgg545fdf';
纯文本、字符

replace(searchValue,replaceValue)方法:
该方法在字符串中第一个出现的searchValue子字符串替换为replaceValue,并返回新的字符串,原有的字符串不受影响。

 .(点号) 匹配除了换行符和其他Unicode行终止符(如回车符)之外的任意字符,等价于[^\n\r]

  // 替换字符
     var str = 'dfgdfgsff';
     var reg = /s/;   //  两个单斜杠之间
     var result = str.replace(reg,'--');
     console.log(result);

  // 替换文本
       var str = '黄艺斌';
     var reg = /黄/;   //  两个单斜杠之间
     var result = str.replace(reg,'哈');
     console.log(result);

 // . 表示匹配任意字符(第一个首字符)
     var str = '黄艺斌';
     var reg = /./;   //  两个单斜杠之间一个 ‘.’
     var result = str.replace(reg,'哈');
     console.log(result);

  // \.转义字符 对于特殊含义的字符,一律使用转义符号进行处理
     var str = 'jubjpg.jpg';
     var reg = /\.jpg/;
     var result = str.replace(reg,'');
     console.log(result);

   // 匹配多个字符
   // global -g 返回一个包含了所有匹配结果的数组,在不加g的时候往往寻找
   //返回的是第一个匹配的结果
     var str = 'jubsaadasdsd';
     var reg = /a/g;
     var result = str.replace(reg,'*');
     console.log(result);

   // i表示不区分大小写
     var str = 'jubsaadAAasdsd';
     var reg = /a/gi;
     var result = str.replace(reg,'*');
     console.log(result);

    // []表示匹配包含的任一字符  g是匹配多个字符
       var str = 'asabsb';
       var reg = /[ab]/g;
       var result = str.replace(reg,'z');
       console.log(result);

   //  []表示匹配包含的任一字符  g是匹配多个字符
     var str = 'asabsbdfdf';
     var reg = /[a-z]/g;   // 匹配a-z之间的任一字符
     var result = str.replace(reg,'*');
     console.log(result);

   // match方法 查找符合条件的字符,返回一个数组,
     var str = 'asabs4599bd5454fd44f';
     var reg = /\d+/g;   // 只包含一个数字类型的数组
     var arr = str.match(reg);
     console.log(arr);

   // 匹配所有数字 大小写字母 下划线
     var str = 'asabADs_bdfd565648f';
     var reg = /[0-9a-zA-Z_]/g;  
     var result = str.replace(reg,'-');
     console.log(result);

    //  ^ 表示 除XXX之外,注意,这个^\必须出现在[]之内

\d     代表[0-9] \D    代表[^0-9]
\w     代表[0-9a-zA-Z_]  \W     代表[^0-9a-zA-Z_]
\s     代表空白符 \S     代表非空白符
\n      换行\t     制表符(Tab键)
\f      换页符\v     垂直制表符
[\b]    退格     注意: \b是匹配匹配一个词语的边界

匹配内容的数量控制


①  {n,m}最小值—最大值
②  {n,}至少n次或者更多次
③  {n}匹配恰好n次
④  ?匹配等价于{0,1}
⑤  +>=1  等价于{1,}
⑥  *>=0  等价于{0,}

匹配都是前一项的次数
Eg:   var str = 'ggle gogle google gooogle';
     var reg = /go?gle/g;
     console.log(str.match(reg));  // ["ggle", "gogle"] 


① 由首位是字母或下划线,其余是字母,数字,下划线组成的6-10位字符串
   var str = 'a_s54545s';
   reg =  /^[a-zA-Z_]{1}\W{5,9}$/;
   console.log(reg.exec(str));

② 身份证匹配(18位):

   reg = /^\d{17}[0-9xX]$/;

③ 邮箱验证:

   897482342@qq.com

   reg =  /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;

④ 电话号码验证

   电话号码 3/4 - 7/8 (如:010-6593383)
   reg = /^(\d{3,4}-)\d[7,8]$/;


贪婪匹配 : *    +   {n,} 尽可能多的从一段文本的开头匹配到文本的末尾,而不是从开始匹配到第一个符合匹配

写法(加问号):   *?    +?    {n,}?


代码:匹配所有div

var str = '<div>你</div><div>我</div>';
var reg = /<div>.*?<\/div>/g;
arr = str.match(reg);
console.log(arr);

通常情况下,以 空格、段落首行、段落末尾、逗号、句号 等符号作为边界,

值得注意的是,分隔符“-”也可以作为边界

     var str = 'welcome to nowa-magic this magic place!';
     var regex = /\b(magic)\b/g;
     console.log(str.match(regex));  
    //  命中 welcome to nowa-magic this magic place! (命中2个单词,-也是分割符)

若是这样  :    
     var str = 'welcome to nowamagic this magic place!';
     var regex = /\b(magic)\b/g;
     console.log(str.match(regex));   
 //  命中 welcome to nowamagic this magic place!  直接命中一个magin(有前后分割符的那个)
 
正则表达式在字符边界问题上 对“-”的处理方式 与 搜索引擎相同,所以文件命名中划线分开名词,推荐这样

边界的相对性

  • 当你对一个普通字符,比如“s”,设定边界的时候,它的边界是诸如空格、分隔符、逗号、句号等。
  • 当你对一个边界,比如分隔符“-”或者“,”等,设定边界的时候,它的边界是普通字符。
     var str = 'welcome to nowa,magic';
     var regex = /\b(,)\b/g;
     console.log(str.match(regex));   //  'welcome to nowa,magic';  直接输出逗号,也就是以a和m为边界


前向声明 (?=)
要求ab必须连续,但是只针对a进行替换

var str = 'baabsa';
reg = /a(?=b)/g;
str = str.replace(reg,'但是');
console.log(str);

反前向声明 (?!)
需要替换掉a,但是要求a后面不能有b

reg = /a(?!b)/g;


千分符(前向,反前向的运用)

\b

匹配一个字边界,即字与空格间的位置。例如,“er\b”匹配“never”中的“er”,但不匹配“verb”中的“er”。


var str = '3425965467';
var reg = /(?=(?!\b)(\d{3})+$)/g;   
// $表示从后面倒着走匹配   ?=表示前面加一个东西  ?!\b 前面不能有开始的空格
str = str.replace(reg, ',');
console.log(str);

子表达式 小括号

匹配19、20开头的四位数年份


reg = /(19|20)\d{2}/


var str = 'border-top-color';
var reg = /-(\w)/g;
str = str.replace(reg, function($0, $1){   // $0代表正则的整体  $1代表正则的第一子项的内容 
    // console.log($0);
    return $1.toUpperCase();

});
console.log(str);


var str = 'a';
var num = 0;
var value = '';
// 拆分为数组
// 排序
// 组合
arr = str.split('');
arr = arr.sort();
str = arr.join('');
reg = /(\w)\1*/g;   // \1表示
str.replace(reg,function($0,$1) {
     if (num < $0.length) {
          num = $0.length;
          value = $1;
     };
})
console.log(value+':'+num);

扩展:

 ① 用ASCII码表示
 
    var reg = /\x61/;   匹配十六进制数,a十进制为97,十六进制为61,需要添加"\x"前缀

    var reg = /\141/;   匹配八进制,八进制不需要添加前缀,直接反斜杠+编码值

 ② 用Unicode表示:必须指定一个4位的十六进制值,并在前面添加"\u"前缀

    var reg = /\u0061/;
    var str = 'JavaScript';
    console.log( str.match(reg));  // "a", index: 1, input: "JavaScript"]
    



比较各种模式匹配的方法

方法所属对象参数返回值通用性特殊性
exec()正则表达式字符串匹配结果的数组,如果没有找到,返回null通用性强大一次只能匹配一个单元,并提供详细的返回信息
text()正则表达式字符串布尔值,表示是否匹配快速验证一次只能匹配一个单元,返回信息与exec()方法基本相似
search()字符串正则表达式匹配起始位置,如果没有找到任何匹配的字符串,则返回-1简单字符定位不执行全局匹配,将忽略标志g,也会忽略正则表达式的lastIndex属性
match()字符串正则表达式匹配的数组,或者匹配信息的数组常用字符匹配方法将根据全局模式的表示g,决定匹配操作的行为
replace()字符串正则表达式,替换文本返回替换后的新字符串匹配替换操作可以支持替换函数,同时可以获取更多匹配信息

作业:

1、过滤html标签,对于网页中的所有标签<h2></h2><p></p>等,替换为空

      var str = '<html><div><span><img />nihao</span>5656</div></html>';   
     var reg = /<\/?[^>]*>/g;
     str = str.replace(reg, '');
     console.log(str);

2、处理文本中的敏感词

     var str = 'niha自由者odf自由者lfdl'; 
     var reg = /自由者/g; 
     str = str.replace(reg, '*');
     console.log(str);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值