首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

一路关于"/g"笔试题

2013-08-01 
一道关于/g笔试题正则里“g”表示全局(global)的意思,比如当替换字符串时,如果正则不加g,则只替换一次。str

一道关于"/g"笔试题

正则里“g”表示全局(global)的意思,比如当替换字符串时,如果正则不加g,则只替换一次。

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)。这道题如下

var reg = /abc/g;var str = 'abcd';reg.test(str);reg.test(str);

两次test的结果分别是什么? 相信不少人会迷惑。

?

这种情况Perl里也会发生

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。

reg1 = /ab/g;reg2 = /cd/g;str = 'abcd';console.log(reg2.test(str));console.log(reg1.test(str));

但Perl中第二次却是false,因为它记住了上次匹配的位置。从字符d后再去匹配ab就匹配不上了。

use 5.012; my $str = 'abcd';if ($str =~ /cd/g) {    say 'true';} else {    say 'false';}if ($str =~ /ab/g) {    say 'true';} else {    say 'false';}

?

?

热点排行