zoukankan      html  css  js  c++  java
  • 一道关于"/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';
    }
    

      

  • 相关阅读:
    webFlux&Reactor
    Docker镜像使用
    Docker的使用
    Docker的容器使用
    为什么样本方差除以(n-1)而不是n ?(自由度)
    机器学习(一)—— 线性回归
    线性、逻辑回归的java实现
    整合多个网络的拓扑结构并降维(Mashup)
    KS检验统计量的扩展应用(CMap)
    p-value
  • 原文地址:https://www.cnblogs.com/snandy/p/2767264.html
Copyright © 2011-2022 走看看