Skip to main content

Command Palette

Search for a command to run...

正则表达式特殊字符含义

Published
1 min read
T

A simple developer.

正则:用于匹配字符串中字符组合的模式

  • 基础语法
    • 特殊元字符
      • 基本元字符:
        • . :默认匹配除换行符之外的任何单个字符
        • \:在特殊字符之间的反斜杠表示下一个字符不是特殊字符,即转译
        • | :逻辑或操作符,'x|y'即匹配x或y
        • []:匹配[]字符集合中的“1个”字符(记住是一个啊!!,要多个你得在后面加数量元字符)
        • [^xyz]:反向字符集,原理等同上面的字符集,但是其意思是匹配任何没有在字符集里的字符。
        • -:定义一个区间,比如[a-z]
      • 数量元字符:
        • *:匹配前面那个表达式0-∞次,等价于{0, }
        • +:匹配前面一个表达式1次或多次 === {1, }
        • ?:匹配前一个表大树0/1次,相当于{0,1}
        • {n}:n为正整数,匹配前面一个字符刚好出现了n次,如/a{2}/ 即可匹配到Caancle中的aa
        • {n, }:表示至少n次
        • {n, m}:出现至少n次,至多m次
        • +?|\*?|{}?:?如果紧跟在任何量词*、+、?或{}后面,会使得该两次变为非贪婪(匹配尽量少的字符),和缺省时用的贪婪模式(匹配尽可能多字符)正好相反了。例如对"123abc"使用/\d+/将会匹配到"123",而使用/\d+?/则只匹配到"1"
      • 位置元字符:
        • ^:匹配输入的开始,例如/^A/不会匹配"an A word"中的A,会匹配到An word中的A
        • $:匹配输入的结束,同上道理
        • \b:匹配一个词的边界(即一个词与另一个词的分界标志例如空格,-等等,除了数字,字母与下划线以外的字符都能算做,包括汉字。。。,但是其后跟汉字的话前面又不能是汉字,可以是字母等)。例如:/\bred/能匹配到"a red hat"中的"red",但是"_red","cred","1red"等就匹配不到了。
        • \B:匹配一个非单词边界,跟\b刚好反的
      • ❤回溯引用与前后查找:
        • (x):正则子表达式,会匹配x并记住匹配项,其中()成为捕获括号(即能够捕获匹配的内容并记住他)
        • (?:x):功能同上,但是非捕获括号,即匹配了但不记住\n:即回溯引用前面捕获的子表达式的内容,如/(\d)a\1/,里面的\1能够知道前面的\d输入的是哪个数字,并在后面匹配一个相同的字符,例:"1a1"就能匹配到"1a2"就匹配不到了。同理如果你使用非捕获括号,就不会对其进行捕获,即无法回溯引用了。
        • x(?=y):先行断言,匹配x,当且仅当x后面跟着y(注意,只会匹配出x,不会匹配到yy只是一个条件),如:/Jack(?=Rose)/能够匹配到"JackRose"中的"Jack"
        • (?<=y)x:后行断言,匹配x当且仅当x前面是y
        • x(?!y):正向否定断言,仅当x后面不跟着y时匹配x,如:/\d*(?!\.)/即匹配后面没有小数点的数字,如"123.456"中能够匹配到"12"
        • (?<!y)x:反向否定,仅当x前面不是y时匹配x
      • 特殊元字符!:
        • \d:匹配一个数字,等价于字符集[0-9]
        • \D:匹配一个非数字字符, ===> [^0-9]
        • \f:匹配一个换页符
        • \n:换行符
        • \r:回车符
        • \s:匹配一个空白字符,包括空格、制表符(tab)、换页符与换行符
        • \S:匹配一个非空白字符
        • \w:匹配一个单子字符(字母、数字、或下划线) ===> [A-Za-z0-9_]
        • \W:匹配一个非单子字符 ===> [^A-Za-z0-9_]
    • 普通字符:
      • a-z、A-Z、0-9、空格
      • 任何非特殊字符的字符(中文、日文、韩文等)
      • 各种字节符(正则匹配会以字节为单位,如/[\u4e00-\u9fa5]/匹配所有汉字
  • 适用场景:多种数据源输入

More from this blog

Git 无法正常访问问题解决 —— DNS无法解析git地址

在国内网络经常会无法访问github,一般呈现错误为: github.com 打不开 git 操作 clone/push/pull/fetch 超时等 这普遍由于国内DNS解析github相关域名的问题,国内DNS解析污染会导致,无法解析github相关域名,使得我们无法获悉正确ip而无法访问。 偏方一剂:修改Host,固定绑定 domain - ip 查询相关域名的解析 IPAddress github.com github.global.ssl.fastly.net asse...

Sep 22, 20221 min read

Vue SSR实战小练

思想 开发环境: 在webpack dev与pro的前端打包构建基础上, 添加webpack server compiler的服务,其为单独创建的node服务,用于渲染html代码并返回给客户端。(其他JS...则仍旧交由webpack dev server来构建) 所以在获取html后要再自行将dev客户端渲染的js加入到html中 在生产环境则不需如此: 由dev与server打包好的文件,将其组合 客户端则访问node服务来获取文件 基本用法 安装:npm install v...

Sep 5, 20229 min read

Jsonp 跨域解决方案解析

由来背景 As we all know,浏览器同源策略会将非同源请求(跨域)抛弃,而许多时候我们可能并未将前端资源与服务端服务放在一个服务器,此时就需要一个跨域的手段了。 基于此,针对同源策略,衍生了一种跨域的方法Jsonp。 Jsonp简单讲,即利用了script标签不受浏览器同源策略影响的特性,从而利用script想服务端跨域请求的方式。 原理解析 图下图所示 封装一个Jsonp函数,Promise化 // jsonp.ts type JsonpOptions<T extends Reco...

Sep 2, 20222 min read
Jsonp 跨域解决方案解析

唯在一心

15 posts

A simple developer.