使用正确的js编写的正则表达式,但是无法匹配

其实只是自己感觉表达式正确而已,其实是错误的。

先直接说答案,.语法无法匹配\n(点语法无法匹配\n),不知道大家有没有恍然大悟。

这里举例子介绍一下:

我现在有一个字符串,例如'12!@@!333!@@!',其中!@@!是一个标记,我需要获取到夹在中间的内容,这个例子就是需要匹配到333。

需要注意的是,这里只是为了演示,才使用正则表达式做这个事情的,如果可以不用正则表达式,最好还是不要用。它很消耗性能,尤其是在字符串长度不可控的时候。

例如这里想要匹配到333,完全可以这样:

javascript 复制代码
let a = '12!@@!333!@@!'
a?.split('!@@!')[1]?.split('!@@!')[0]

下面来用正则试一下

可能会这样写

javascript 复制代码
a.replace(/.*!@@!(.*)!@@!/gi, (str, p1) => p1)

对于这个demo,确实可以,现在把目标字符串改一下,现在匹配'1\n2!@@!333!@@!'这个,注意,这里有一个换行符。那么还会不会正确输出呢?输出的结果是:

javascript 复制代码
1
333

注意1和333之间有一个换行符。这个问题就是在最开始提到的点语法无法匹配\n,如果想要匹配,正则表达式需要改成这样:

javascript 复制代码
a.replace(/.*!@@!(.*)!@@!/gis

模式中添加s(单行模式)模式,这样\n就会被.匹配到了。

相关推荐
Lsx_3 分钟前
微信支付接入全流程:JSAPI支付、小程序支付与H5支付
前端·javascript·全栈
试图让你心动30 分钟前
【无标题】
前端·javascript·vue.js
Hilaku33 分钟前
为什么每个前端都应该拥有一个自己的独立博客?
前端·javascript·程序员
木圭的AI时代指南1 小时前
实测 MiniMax M3.1 Flash:同一道 Three.js 大题,两个 agent 差出 4.6 倍
开发语言·javascript·ecmascript
西红柿炖牛腩3541 小时前
3D 模型压缩脚本又报错又配环境?换个不用维护的方案
javascript·3d·性能优化
tryCbest1 小时前
Vue3——第 6 篇:事件处理与表单绑定——v-on 与 v-model
前端·javascript·vue.js
程序员小孔.2 小时前
基于 Spring Cloud + Vue 的 JEEWMS 开源仓储管理平台设计与实现
前端·javascript·vue.js·spring boot·spring cloud·开源
创世虚拟世界2 小时前
把 3D 虚拟世界拉到本地:vibe coding 的手感,是从看见自己那一行改动开始的
javascript·数据库·人工智能·3d·gitee·虚拟现实
夕阳_醉了2 小时前
花了一天的时间,地板式扫盲了vue3所有API盲点
前端·javascript·vue.js
ShineWinsu12 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素