正则表达式里的一些东西

由一道题目引发的对于正则表达式的深入学习 ?

【js】去除字符串中最后一个指定的字符

function delLast(str, target) {
    let reg = new RegExp(`${target}(?=([^${target}*])$)`)
    console.log(str.replace(reg, '')) // number1s
}
delLast("number1ers", "er")
`` 反引号
  • 可以用来在字符串中嵌入变量
  • 定义普通字符串或多行字符串
正则表达式
中括号表达式

若要创建匹配字符组的一个列表,请在方括号[] 内放置一个或更多单个字符。

/Chapter [12345]/ // 匹配 Chapter 1、Chapter 2、Chapter 3、Chapter 4 和 Chapter 5
/Chapter [1-5]/ // - 表示范围,匹配同上
/Chapter [^12345]/  // 匹配1、2、3、4 或 5 之外的任何数字和字符
/[A-Za-z0-9]/  // 指定任何大写或小写字母或任何数字的匹配
基本模式匹配
  • ^ 表示只匹配那些以…开头的字符串。

  • $ 匹配以…结尾的字符串。

  • 字符 ^$ 同时使用时,表示精确匹配(字符串与模式一样)。

    ^bucket$
    

    只匹配字符串"bucket"。

  • 如果一个模式不包括 ^$ ,那么它与任何包含该模式的字符串匹配。

字符簇

当在一组方括号里使用 ^ 时,它表示"非""排除"的意思,常常用来剔除某个字符。

^[^0-9][0-9]$

要求第一个字符不能是数字。这个模式与"&5"、“g7"及”-2"是匹配的,但与"12"、"66"是不匹配的。

替换和分组
  • 替换使用 | 字符来允许在两个或多个替换选项之间进行选择。

  • 若要防止匹配被保存以备将来使用,在括号内正则表达式模式之前放置 ?:

    /^(?:Chapter|Section) [1-9][0-9]{0,1}$/
    

    要么匹配行首的单词 Chapter,要么匹配行尾的单词 Section 及跟在其后的任何数字;不保存子匹配项。

  • 正向预测先行使用 ?= 指定,匹配处于括号中匹配正则表达式模式的起始点的搜索字符串。

    /Windows(?=95 |98 |NT )/
    

    匹配 Windows 95、Windows 98 和 Windows NT。
    找到一处匹配后,紧接着就在匹配的文本(不包括预测先行中的字符)之后搜索下一处匹配。例如,如果上面的表达式匹配 Windows 98,将在 Windows 之后而不是在 98 之后继续搜索。

  • 反向预测先行使用 ?! 指定,匹配处于与正则表达式模式不匹配的字符串的起始点的搜索字符串。

先行断言 和 后行断言
  • 先行断言 指的是,x 只有 y 前面才匹配,必须写成 /x(?=y)/

  • 先行否定断言 指的是,x 只有不在 y 前面才匹配,必须写成 /x(?!y)/

  • 后行断言 指的是,x 只有 y 后面才匹配,必须写成 /(?<=y)x/

  • 后行否定断言 指的是,x 只有 不在 y 后面才匹配,必须写成 /(?<!y)x/

“后行断言” 的实现:需要先匹配 /(?<=y)x/ 的 x,然后再回到左边,匹配 y 的部分。这种 “先右后左” 的执行顺序,与所有其他正则操作相反,导致了一些不符合预期的行为。



🔗 推荐链接:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值