一道关于"/g"笔试题
正则里“g”表示全局(global)的意思,比如当替换字符串时,如果正则不加g,则只替换一次。
1 2 3 4 | str = 'hello, jack, hello, lily' ; reg = /hello/; res = str.replace(reg, 'hi' ); console.log(res); // 'hi, jack, hello, lily' |
第二个hello未被替换,正则reg换成“/hello/g”后则全部替换。
“g”还有一个作用是它会记录上次匹配时的位置(lastIndex)。这道题如下
1 2 3 4 | var reg = /abc/g; var str = 'abcd' ; reg.test(str); reg.test(str); |
两次test的结果分别是什么? 相信不少人会迷惑。
这种情况Perl里也会发生
1 2 3 4 5 6 7 8 9 10 11 12 13 | use 5.012; my $str = 'abcd' ; if ( $str =~ /abc/g) { say 'true' ; } else { say 'false' ; } if ( $str =~ /abc/g) { say 'true' ; } else { say 'false' ; } |
对于不同的正则对象,JS中会从字符串重新开始,因此以下两次输出都是true。
1 2 3 4 5 | reg1 = /ab/g; reg2 = /cd/g; str = 'abcd' ; console.log(reg2.test(str)); console.log(reg1.test(str)); |
但Perl中第二次却是false,因为它记住了上次匹配的位置。从字符d后再去匹配ab就匹配不上了。
1 2 3 4 5 6 7 8 9 10 11 12 13 | use 5.012; my $str = 'abcd' ; if ( $str =~ /cd/g) { say 'true' ; } else { say 'false' ; } if ( $str =~ /ab/g) { say 'true' ; } else { say 'false' ; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端