代码之家  ›  专栏  ›  技术社区  ›  Get Off My Lawn

除非字符串中有括号,否则向前看不匹配

  •  1
  • Get Off My Lawn  · 技术社区  · 6 年前

    我使用这个负向前看来搜索单行字符串:

    /\s+(?![^[]*]).+/g
    

    这符合以下两个条件:

    // String 1
    a.casd-234[test='asfd asdf'] abc defg
    
    // String 2
    asf.one.two.three four five six
    

    这是回报 abc defg four five six

    我试着写一个express来获取文本之前的值( a.casd-234[test='asfd asdf'] , asf.one.two.three ):

    /.+(?<=[^[]*])\s/g
    

    这对字符串1有效,但对字符串2无效,因为它找不到任何东西,因为没有 [ ]

    1 回复  |  直到 6 年前
        1
  •  1
  •   Wiktor Stribiżew    6 年前

    .+ 在正则表达式的末尾,匹配除换行符以外的1+个字符,直到行/字符串结尾)。

    .replace

    var rx = /\s+(?![^[]*]).+/;
    console.log("a.casd-234[test='asfd asdf'] abc defg".replace(rx, ''));
    console.log("asf.one.two.three four five six".replace(rx, ''));

    注意你不需要 g 因为你只需要替换一次。如果字符串可能有多行,请替换每行 . [^] [\s\S]