正则表达式中的 (?:)
(?:)表示不存储匹配的值
假如我们要在字符串中查找两个重复的单词,比如"123abcdefabc456"
let str = '123abcdefabc456';
let reg = /(\w+).*?\1/;
str.match(reg); // ['abcdefabc', 'abc']
此时,(\w+) 匹配的是第一个 'abc' ,而 \1 代表前面的(\w+)
如果我们对 \w+ 使用 ?: 标记,表示不存储 \w+的值,那么\1就没有对应的匹配,所以不能匹配到值
reg=/(?:\w+).*?\1/
str.match(reg) // null
再举一个例子,我们要在字符串中查找'abcde'或者'abcfg'
reg=/abc(de|fg)/g
str='abcde12abcfg'
console.log(...str.matchAll(reg))
// ['abcde', 'de'] ['abcfg', 'fg']
可以看到结果集里面出现了'de'和'fg'
如果使用?:
reg=/abc(?:de|fg)/g
console.log(...str.matchAll(reg))
// ['abcde'] ['abcfg']
'de'和'fg'消失了,使用这种方式可以避免无意义的匹配
第三个例子,在正则分割字符串为数组的时候,可以使用/(?:)/来分隔单个字符
assert.deepEqual("😄😄".split(/(?:)/u), ["😄", "😄"]);
本文来自博客园,作者:Bin_x,转载请注明原文链接:https://www.cnblogs.com/Bin-x/p/16718474.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2021-09-22 JDK安装
2021-09-22 maven安装