使用正确的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就会被.匹配到了。

相关推荐
WebInfra18 分钟前
Rspack 2.0 正式发布!
前端·javascript·前端框架
Highcharts.js39 分钟前
在 React 中使用 useState 和 @highcharts/react 构建动态图表
开发语言·前端·javascript·react.js·信息可视化·前端框架·highcharts
|晴 天|2 小时前
Vue 3 实战:打造可拖拽歌词、播放列表的嵌入式音乐播放器
前端·javascript·vue.js
Liu.7742 小时前
Vue 3 开发中遇到的报错(2)
前端·javascript·vue.js
|晴 天|2 小时前
Vue 3 实现实时通知系统:支持未读计数、红点提醒、一键已读
javascript·vue.js·ecmascript
大流星2 小时前
敲黑板!async/await应用原理
前端·javascript
qq_12084093713 小时前
Three.js 工程向:相机控制与交互手感调优(OrbitControls)
前端·javascript·orbitcontrols
We་ct3 小时前
LeetCode 300. 最长递增子序列:两种解法从入门到优化
开发语言·前端·javascript·算法·leetcode·typescript
踩着两条虫5 小时前
VTJ.PRO 新手入门:从环境搭建到 AI 生成首个 Vue3 应用
前端·javascript·数据库·vue.js·人工智能·低代码
他是龙5515 小时前
63:JS 加密断点调试与逆向实战
开发语言·javascript·状态模式