正则表达式的整理

418 阅读2分钟

正则表达式用来匹配和处理文本的字符串,它经常被简称为模式,其实就是一些由字符构成的字符串。这些字符可以是普通字符(纯文本)或元字符(有特殊含义的特殊字符)。正则表达式语言是内置于其他语言或软件产品里的“迷你”语言。主要用途是用于“搜索”和“替换”。

正则表达式中的特殊字符

特殊字符 含义
i 忽略大小写,放最后
g 提取数组中的所有匹配项,放最后
. 可以匹配除换行符以外的任意单个字符
\ 用来对特殊字符进行转义
[] 用来定义一个字符集合,其含义是必须匹配该集合里的字符之一。有两种形式:1,把所有字符列举出来;2,利用原字符“-”以字符区间的方式给出;[0123456789]与[0-9]等价
^ 只有当它出现在一个字符集合里(被放在[和]之间)并紧跟在左方括号[的后面时,它是“求非”的作用(如:非数字[^0-9])。如果是在一个字符集合的外面并处于一个模式的开头,它匹配字符串的开头
\b 指定一个单词边界(\bcap\b匹配cap;\bcap匹配captain,cap,cape;cap\b匹配cap,recap)
$ 字符串的结尾
[\b] 退格
\f 换页
\n 换行
\r 回车
\t Tab键
\v 垂直制表符
\d 任何一个数字字符(等价于[0-9])
\D 任何一个非数字字符(等价用于[^0-9])
\w 任何一个字母(大小写都可),数字,下划线(等价于[a-zA-Z0-9_])
\W 任何一个非字母数字或非下划线字符
\s 任何一个空白字符
\S 任何一个非空白字符
+ 匹配字符或字符集合的一次或多次重复出现
* 匹配字符或字符集合的零次或多次重复出现
? 匹配字符或字符集合的零次或一次重复出现
{} 设定匹配字符或字符集合重复出现次数的最小值和最大值
() 子表达式
| 或者

回溯引用匹配

1)、回溯引用指的是模式的后半部分引用在前半部分中定义的子表达式

\1:代表模式里的第一个子表达式

\2:代表模式里的第二个子表达式

以此类推;

2)、回溯引用在替换中的应用:

文本:

  313-555-1234

  248-555-9999

  810-555-9000

正则表达式:

  (\d{3})(-)(\d{3})(-)(\d{4})

替换:

  ($1) $3-$5

结果:

  (313) 555-1234

  (248) 555-9999

  (810) 555-9000

前后查找

1)、向前查找

以(?=)开头的子表达式

应用:

文本:

  www.forta.com

  mail.forta.com

  ftp://ftp.forta.com

正则表达式

  .+(?=:)

结果:

  http://www.forta.com

  https://mail.forta.com

  ftp://ftp.forta.com   

2)、向后查找

以(?<=)开头的子表达式

应用:

文本:

  ABC01: $23.45

  HGG42: $5.32

  Tatal items found:4

正则表达式

  (?<=$)[0-9.]+

结果:

  ABC01: $23.45

  HGG42: $5.32

  Tatal items found:4

备注:java、.NET,PHP和Pert都支持向后查找,而javaScript不支持

常用例子

1、手机号码

// 验证10-11位数字
^[0-9]{10,11}$

2、替换html字符串代码中的img标签的src地址

function textHandle(publicUrl, text) {
    // publicUrl:替换后的图片地址
    // text 需要进行替换的文本
    // 替换img标签的src地址
    text.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/gi, (match, capture) => {
      text = text.replace(new RegExp(capture, 'g'), `${publicUrl}`);// 这里也可以替换成需要的路径
    });
    return text;
}
 
let text = '<img src="1213232" alt="" >bnsciqcowqnnce <img src="wxw1314" alt="">bdciwenhcwe <img src="wxw12345678" alt="">'
 
console.log(textHandle("myurl",text));

// 输出: <img src="myurl" alt="" >bnsciqcowqnnce <img src="myurl" alt="">bdciwenhcwe <img src="myurl" alt="">
 

3、获取地址栏参数

function getQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if (r != null)
        return  decodeURI(r[2]);
    return null;
}