正则表达式的用途

  1. 测试字符串的某个模式(数据有效性验证)

  2. 替换文本。

  3. 根据模式匹配从字符串中提取一个子字符串

正则表达式的语法

创建正则表达式

var patt=new RegExp(pattern,modifiers);//要加引号
或者更简单的方式:
var patt=/pattern/modifiers;
parttern(模式)描述了表达式的模式
//modifiers(修饰符)用于指定全局匹配,区分大小写,和多行匹配
  • new RegExp()方式

var re = new RegExp();//RegExp是一个对象,和Aarray一样  
//但这样没有任何效果,需要将正则表达式的内容作为字符串传递进去  
re =new RegExp("a");//最简单的正则表达式,将匹配字母a  
re=new RegExp("a","i");//第二个参数,表示匹配时不分大小写

RegExp构造函数第一个参数为正则表达式的文本内容,而第二个参数则为可选项标志.标志(修饰符)可以组合使用

clipboard.png

var re = new RegExp("a","gi");//匹配所有的a或A
  • 字面量

var re = /a/gi;

方括号

方括号用于查找某一范围内的字符

clipboard.png

元字符

元字符是拥有特殊含义的字符

clipboard.png

clipboard.png

量词

clipboard.png

clipboard.png

正则表达式分组

非捕获组:(?:...),用来代替少量不又没的捕获型分组,不会干扰捕获型分组的编号
捕获组:(...),一个捕获型分组将复制它所匹配的文本,将其放入result数组中。每个捕获型分组将被指定一个编号。从1开始,放入result[1]
向前正向匹配:(?=...),类似于非捕获型分组,但是在这个分组匹配过后,文本将倒回它开始的地方,实际上不匹配任何东西
向前负向匹配:(?!...)勒西与向前正向匹配(非捕获型分组),但是只有当它匹配失败时才进行匹配

与 的使用
1指向分组1所捕获的文本的一个引用,所以它可以被再次匹配
例如:(搜索文本中重复的单词)
n指向分组n中的引用

  • 例子1:给定字符串 str,检查其是否包含连续重复的字母(a-zA-Z),包含返回 true,否则返回 false

function containsRepeatingLetter(str) {
    var partern = /([a-zA-Z])\1/;
    return partern.test(str);
 
}
  • 例子2:js实现千分位分隔符

<span style="font-size:14px;">
function format (num) {  
    var reg=/\d{1,3}(?=(\d{3})+$)/g;   
    return (num + '').replace(reg, '$&,');  
}
</span>  

正则表达式 d{1,3}(?=(d{3})+$) 表示前面有1~3个数字,后面的至少由一组3个数字结尾。

?=表示正向引用,可以作为匹配的条件,但匹配到的内容不获取,并且作为下一次查询的开始。

$& 表示与正则表达式相匹配的内容,具体的使用可以查看字符串replace()方法的

clipboard.png

正则对象属性

  1. source:返回正则表达式模式的文本的复本。只读。

  2. gobal:【返回布尔值】是否全局匹配

  3. ignoreCase:【返回布尔值】是否忽视大小写

  4. multiline:【返回布尔值】是否跨行

  5. lastIndex:返回字符位置,它是被查找字符串中下一次成功匹配的开始位置。

正则对象方法

  1. compile:可以在脚本执行过程中编译正则表达式,也可以改变已有表达式。把正则表达式编译为内部格式,从而执行的更快。

  2. test:用来检测一个字符串是否匹配某个正则表达式,如果匹配成功,返回 true ,否则返回 false;【返回布尔值】

  3. exec:用来检索字符串中与正则表达式匹配的值。exec() 方法【返回一个数组】,其中存放匹配的结果。如果未找到匹配的值,则返回 null;

  4. toString:字符串形式的模式

clipboard.png

支持正则表达式的String方法

clipboard.png

replace与正则表达式完成转换

clipboard.png

function rgb2hex(sRGB) {
   return sRGB.replace(/^rgb\((\d+)\,\s*(\d+)\,\s*(\d+)\)$/g, function(a, r, g, b){//a为匹配项,从第二个最第四个参数都是捕获组
       return '#' + hex(r) + hex(g) + hex(b);
   });
}
function hex(n){
    return n < 16 ? '0' + (+n).toString(16) : (+n).toString(16);
}

参考链接:
菜鸟教程正则表达式


时间冒泡
101 声望4 粉丝

在路上。


« 上一篇
ES6学习

引用和评论

0 条评论