正则表达式

创建正则表达式

  1. 使用一个正则表达式字面量
const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;
  1. 调用 RegExp 对象的构造函数
const regex = new RegExp(pattern, [, flags]);

特殊字符

  • ^ 匹配输入的开始
  • $ 匹配输入的结束
  • * 0 次或多次 {0,}
  • + 1 次或多次 {1,}
  • ?
    • 0 次或者 1 次 {0,1}。
    • 用于先行断言
    • 如果紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪
      • 对 "123abc" 用 /\d+/ 将会返回 "123",
      • 用 /\d+?/,那么就只会匹配到 "1"。
  • . 匹配除换行符之外的任何单个字符
  • (x) 匹配 'x' 并且记住匹配项
  • (?:x) 匹配 'x' 但是不记住匹配项
  • x(?=y) 配'x'仅仅当'x'后面跟着'y'.这种叫做正向肯定查找。
  • x(?!y) 匹配'x'仅仅当'x'后面不跟着'y',这个叫做正向否定查找。
  • x|y 匹配‘x’或者‘y’。
  • {n} 重复 n 次
  • {n, m} 匹配至少 n 次,最多 m 次
  • [xyz] 代表 x 或 y 或 z
  • xyz 不是 x 或 y 或 z
  • \d 数字
  • \D 非数字
  • \s 空白字符,包括空格、制表符、换页符和换行符。
  • \S 非空白字符
  • \w 单词字符(字母、数字或者下划线) [A-Za-z0-9_]
  • \W 非单字字符。a-za-z0-9_
  • \3 表示第三个分组
  • \b 词的边界
    • /\bm/匹配“moon”中得‘m’;
  • \B 非单词边界

使用正则表达式的方法

  • exec 一个在字符串中执行查找匹配的 RegExp 方法,它返回一个数组(未匹配到则返回 null)。
  • test 一个在字符串中测试是否匹配的 RegExp 方法,它返回 true 或 false。
  • match 一个在字符串中执行查找匹配的 String 方法,它返回一个数组或者在未匹配到时返回 null。
  • search 一个在字符串中测试匹配的 String 方法,它返回匹配到的位置索引,或者在失败时返回-1。
  • replace 一个在字符串中执行查找匹配的 String 方法,并且使用替换字符串替换掉匹配到的子字符串。
  • split 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的 String 方法。

练习

匹配结尾的数字

/\d+$/g;

统一空格个数 字符串内如有空格,但是空格的数量可能不一致,通过正则将空格的个数统一变为一个。

let reg = /\s+/g;
str.replace(reg, " ");

判断字符串是不是由数字组成

str.test(/^\d+$/);

电话号码正则

  • 区号必填为 3-4 位的数字
  • 区号之后用“-”与电话号码连接电话号码为 7-8 位的数字
  • 分机号码为 3-4 位的数字,非必填,但若填写则以“-”与电话号码相连接
/^\d{3,4}-\d{7,8}(-\d{3,4})?$/;

手机号码正则表达式 正则验证手机号,忽略前面的 0,支持 130-139,150-159。忽略前面 0 之后判断它是 11 位的。

/^0*1(3|5)\d{9}$/;

使用正则表达式实现删除字符串中的空格

funtion trim(str) {
  let reg = /^\s+|\s+$/g
  return str.replace(reg, '');
}

限制文本框只能输入数字和两位小数点等等

/^\d*\.\d{0,2}$/;

只能输入小写的英文字母和小数点,和冒号,正反斜杠(:./)

/^[a-z\.:\/\\]*$/;

替换小数点前内容为指定内容 例如:infomarket.php?id=197 替换为 test.php?id=197

var reg = /^[^\.]+/;
var target = "---------";
str = str.replace(reg, target);

只匹配中文的正则表达式

/[\u4E00-\u9FA5\uf900-\ufa2d]/gi;

返回字符串的中文字符个数 先去掉非中文字符,再返回 length 属性。

function cLength(str) {
  var reg = /[^\u4E00-\u9FA5\uf900-\ufa2d]/g;
  //匹配非中文的正则表达式
  var temp = str.replace(reg, "");
  return temp.length;
}

正则表达式取得匹配 IP 地址前三段 只要匹配掉最后一段并且替换为空字符串就行了

function getPreThrstr(str) {
  let reg = /\.\d{1,3}$/;
  return str.replace(reg, "");
}

匹配

之间的内容

/<ul>[\s\S]+?</ul>/i

用正则表达式获得文件名 c:\images\tupian\006.jpg 可能是直接在盘符根目录下,也可能在好几层目录下,要求替换到只剩文件名。 首先匹配非左右斜线字符 0 或多个,然后是左右斜线一个或者多个。

function getFileName(str) {
  var reg = /[^\\\/]*[\\\/]+/g;
  // xxx\ 或是 xxx/
  str = str.replace(reg, "");
  return str;
}

绝对路径变相对路径 "http://23.123.22.12/image/somepic.gif"转换为:"/image/somepic.gif"

var reg = /http:\/\/[^\/]+/;
str = str.replace(reg, "");

用户名正则 用于用户名注册,,用户名只 能用 中文、英文、数字、下划线、4-16 个字符。

/^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/;

匹配英文地址 规则如下: 包含 "点", "字母","空格","逗号","数字",但开头和结尾不能是除字母外任何字符。

/^[a-zA-Z][\.a-zA-Z,0-9]*[a-zA-Z]$/;

正则匹配价格 开头数字若干位,可能有一个小数点,小数点后面可以有两位数字。

/^\d+(\.\d{2})?$/;

身份证号码的匹配 身份证号码可以是 15 位或者是 18 位,其中最后一位可以是 X。其它全是数字

/^(\d{14}|\d{17})(X|x)$/;

单词首字母大写 每单词首字大写,其他小写。如 blue idea 转换为 Blue Idea,BLUE IDEA 也转换为 Blue Idea

function firstCharUpper(str) {
  str = str.toLowerCase();
  let reg = /\b(\w)/g;
  return str.replace(reg, (m) => m.toUpperCase());
}

正则验证日期格式 yyyy-mm-dd 格式 4 位数字,横线,1 或者 2 位数字,再横线,最后又是 1 或者 2 位数字。

/^\d{4}-\d{1,2}-\d{1,2}$/;

去掉文件的后缀名 www.abc.com/dc/fda.asp 变为 www.abc.com/dc/fda

function removeExp(str) {
  return str.replace(/\.\w$/, "");
}

验证邮箱的正则表达式 开始必须是一个或者多个单词字符或者是-,加上@,然后又是一个或者多个单词字符或者是-。然后是点“.”和单词字符和-的组合,可以有一个或者 多个组合。

/^[\w-]+@\w+\.\w+$/;

正则判断标签是否闭合 例如:<img xxx=”xxx” 就是没有闭合的标签;

p的内容,同样也是没闭合的标签。

标签可能有两种方式闭合,undefined 或者是

xxx

/<([a-z]+)(\s*\w*?\s*=\s*".+?")*(\s*?>[\s\S]*?(<\/\1>)+|\s*\/>)/i;

正则判断是否为数字与字母的混合 不能小于 12 位,且必须为字母和数字的混

/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i;

将阿拉伯数字替换为中文大写形式

function replaceReg(reg, str) {
  let arr = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
  let reg = /\d/g;
  return str.replace(reg, function (m) {
    return arr[m];
  });
}

去掉标签的所有属性

<td style="width: 23px; height: 26px;" align="left">***</td> 变成没有任何属性的 <td>***</td> 思路:非捕获匹配属性,捕获匹配标签,使用捕获结果替换掉字符串。正则如下:

/(<td)\s(?:\s*\w*?\s*=\s*".+?")*?\s*?(>)/
Copyright © aaron 2023 all right reserved,powered by Gitbook该文章修订时间: 2023-06-07 15:48:30

results matching ""

    No results matching ""