美文网首页
正则表达式

正则表达式

作者: wwmin_ | 来源:发表于2022-12-29 10:35 被阅读0次

一、可视化网站:

  • https://regexper.com/
    主要功能:已可视化方式表达正则表达式
    https://regexper.com/
  • https://regex101.com/
    主要功能:可对正则表达式进行测试,以及由大量的语言及规则可参考
    https://regex101.com/

二、正则表达式知识点

  1. 常用
[abc]  //单个a或b或c字符
[^abc]  //非a或b或c的字符
[a-z]  //在a到z范围内的小写英语字母字符
[^a-z]  //在a到z范围外的字符
[a-zA-Z]  //在a到z或A到Z范围内的大小写英语字母字符
.  //任意单个字符
a|b  //选择 - 匹配 a 或 b
\s  //任意空白字符
\S  //非空白字符
\d  //阿拉伯数字字符
\D  //非阿拉伯数字字符
\w  //字母、数字或下划线的字符
\W  //非字母、数字或下划线的字符
(?:...)  //匹配括号中的内容(不捕获)
(...)  //匹配并捕获括号中的内容
a?  //零个或一个a
a*  //零个或更多a
a+  //一个及以上a
a{3}  //三个a
a{3,}  //三个a以上
a{3,6}  //3到6个a
^  //文本开头
$  //文本末尾
\b  //单词边界
\B  //非单词边界
  1. 一般
\n  //换行符
\r  //回车符
\t  //制表符
\0  //空字符
  1. 锚点
^  //文本开头
$  //文本末尾
\b  //单词边界
\B  //非单词边界
  1. 元字符序列
.  //任意单个字符
a|b  //选择 - 匹配 a 或 b
\s  //任意空白字符
\S  //非空白字符
\d  //阿拉伯数字字符
\D  //非阿拉伯数字字符
\w  //字母、数字或下划线的字符
\W  //非字母、数字或下划线的字符
\v  //纵向空白字符
\#  //匹配编号子表达式
\p{...}  //Unicode 属性
\P{...}  //\p的反集
\k<name>  //匹配'name'子表达式的捕获结果
\uYYYY  //YYYY对应Hex字符
\xYY  //YY对应Hex字符
\ddd  //八进制字符 ddd
\cY  //Y对应Ctrl字符
[\b]  //退格符
\  //按文本形式处理字符
  1. 重复
a?  //零个或一个a
a*  //零个或更多a
a+  //一个及以上a
a{3}  //三个a
a{3,}  //三个a以上
a{3,6}  //3到6个a
a*  //贪婪模式
a*?  //懒惰模式
  1. 子组结构
(?:...)  //匹配括号中的内容(不捕获)
(...)  //匹配并捕获括号中的内容
(?<name>...)  //命名捕获组
(?=...)  //肯定型前视
(?!...)  //否定型前视
(?<=...)  //肯定型后视
(?<!...)  //否定型后视
  1. 字符类别
[abc]  //单个a或b或c字符
[^abc]  //非a或b或c的字符
[a-z]  //在a到z范围内的小写英语字母字符
[^a-z]  //在a到z范围外的字符
[a-zA-Z]  //在a到z或A到Z范围内的大小写英语字母字符
  1. 修饰符
g  //全局模式
m  //多行模式
i  //不区分大小写
y  //粘连模式
u  //开启Unicode支持
  1. 替换
$1  //捕获组1内容
$`  //匹配项之前的内容
$'  //匹配项之后的内容
$&  //完整匹配内容
\x20  //HEX替换值
\x{06fa}  //HEX替换值
\u06fa  //HEX替换值
\t  //插入一个制表符
\r  //插入一个回车符
\n  //插入一个换行符
\f  //插入一个换页符

三、常用正则表达式

  1. 匹配任意字符(包括换行符)
[\s\S]*
匹配任意字符(包括换行符)
  1. 匹配网址
^http(?:s?):\/\/regex101\.com\/r\/([a-zA-Z0-9]{1,6})?$
匹配网址
  1. 数字格式化 如1234567 -> 1,234,567
//JavaScript语法
const a=1234567;
//正则方式
function formatNumber(str){
    return str.replace(/\B(?=(\d{3})+(?!\d))/g,',')
}
//正则方式2
function formatNumber(num) {
  num = parseFloat(num.toFixed(3));
  let [integer, decimal] = String.prototype.split.call(num, '.');
  integer = integer.replace(/\d(?=(\d{3})+$)/g, '$&,');
  return integer + '.' + (decimal ? decimal : '');
}
//api版
a.toLocaleString('en-US');
a.toLocaleString(10);
  1. url参数转换为json
//query("?a=1&b=2") ==> {a:"1",b:"2"}
const query = (search = '') => ((querystring = '') => (q => (querystring.split('&').forEach(item => (kv => kv[0] && (q[kv[0]] = kv[1]))(item.split('='))), q))({}))(search.split('?')[1])
//去掉箭头函数写法
const qeury = function (search = '') {
  return function (querystring = '') {
    return function (q) {
      return querystring.split('&').forEach(function (item) {
        return function (kv) {
          return kv[0] && (q[kv[0]] = kv[1])
        }(item.split('='))
      }), q
    }({})
  }(search.split('?')[1])
};
//正则表达式写法
function qeury(url) {
  const paramsStr = /.+\?(.+)$/.exec(url)[1]; // 将 ? 后面的字符串取出来
  const paramsArr = paramsStr.split('&'); // 将字符串以 & 分割后存到数组中
  let paramsObj = {};
  // 将 params 存到对象中
  paramsArr.forEach(param => {
    if (/=/.test(param)) { // 处理有 value 的参数
      let [key, val] = param.split('='); // 分割 key 和 value
      val = decodeURIComponent(val); // 解码
      val = /^\d+$/.test(val) ? parseFloat(val) : val; // 判断是否转为数字

      if (paramsObj.hasOwnProperty(key)) { // 如果对象有 key,则添加一个值
        paramsObj[key] = [].concat(paramsObj[key], val);
      } else { // 如果对象没有这个 key,创建 key 并设置值
        paramsObj[key] = val;
      }
    } else { // 处理没有 value 的参数
      paramsObj[param] = true;
    }
  })

  return paramsObj;
}
  1. 模板引擎实现
let template = '我是{{name}},年龄{{age}},性别{{sex}}';
let data = {
  name: '姓名',
  age: 18
}
render(template, data); // 我是姓名,年龄18,性别undefined
function render(template, data) {
  const reg = /\{\{(\w+)\}\}/; // 模板字符串正则
  if (reg.test(template)) { // 判断模板里是否有模板字符串
    const name = reg.exec(template)[1]; // 查找当前模板里第一个模板字符串的字段
    template = template.replace(reg, data[name]); // 将第一个模板字符串渲染
    return render(template, data); // 递归的渲染并返回渲染后的结构
  }
  return template; // 如果模板没有模板字符串直接返回
}
  1. javascript 正则表达式中的g修饰符,会导致两次执行reg.test(string)结果不一样,原因是lastIndex的问题导致的,解决方法是可以把reg的g修饰符去除 或者第二次及之后test前执行reg.lastIndex =0
var reg = /^https?:\/\/[a-zA-Z0-9-._\/]+/gi;
reg.test("http://www.baidu.com");//true
reg.test("http://www.baidu.com");//false
//方法一:去掉g
var reg = /^https?:\/\/[a-zA-Z0-9-._\/]+/i;
//方法二: test之后,执行reg.lastIndex=0
reg.test("http://www.baidu.com");//true
reg.lastIndex=0;
  1. email
/[a-zA-Z0-9._-]{1,99}(@)[a-zA-Z0-9]{1,99}(.)[a-zA-Z]{1,3}/gm

作者:wwmin
微信公众号: DotNet技术说
本文链接:https://www.jianshu.com/p/0f5b76a9cfe8
评论和私信会在第一时间回复。转载请注明出处!
如果您觉得文章对您有帮助,关注点赞,您的鼓励是博主的最大动力!

【此帖持续更新。。。】

相关文章

  • Linux命令行与Shell脚本编程大全-shell正则表达式

    本章内容: 定义正则表达式 了解基本正则表达式 扩展正则表达式 创建正则表达式 定义正则表达式 正则表达式是你定义...

  • 正则相关

    正则表达式基本语法 正则表达式常见字符 正则表达式特殊字符 正则表达式数量词 正则表达式边界匹配 正则表达式逻辑或...

  • 正则表达式系列-1

    正则表达式系列-1正则表达式系列-2正则表达式系列-3正则表达式系列-4 什么是正则表达式 正则表达式就是用事先定...

  • 正则表达式

    正则表达式 - 教程正则表达式 - 简介正则表达式 - 语法正则表达式 - 元字符正则表达式 - 运算符优先级正则...

  • Python基础入门 - 正则表达式与综合实战

    1. 初识正则表达式 1.1 介绍 步骤介绍正则表达式入门及应用正则表达式的进阶正则表达式案例 1.2 正则表达式...

  • Java正则表达式参考

    Java正则表达式入门 java正则表达式应用 深入浅出之正则表达式(一) 深入浅出之正则表达式(二) 正则表达式...

  • 正则表达式

    正则表达式 正则表达式就是记录文本规则的代码 正则表达式常用的元字符 正则表达式常用的限定符 正则表达式举例:这里...

  • Python爬虫(十)_正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • python正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • 正则表达式

    了解正则表达式基本语法 能够使用JavaScript的正则对象 正则表达式简介 什么是正则表达式 正则表达式:用于...

网友评论

      本文标题:正则表达式

      本文链接:https://www.haomeiwen.com/subject/qxoaqdtx.html