代码之家  ›  专栏  ›  技术社区  ›  Andre Elrico

包含一个l和三个w的正则表达式匹配字符串

  •  -2
  • Andre Elrico  · 技术社区  · 8 年前

    有没有一种方法可以以简单的方式匹配那些“匹配此”标记的字符串,而不必使用许多复杂的正则表达式 ORs 直接使用regEx?或者使用多个regEx请求?

    因此,匹配应该有4个字符->3x宽和1x长

    string = 
    "wwww
    lwlw
    lwww  << match this
    wlww  << match this
    wwlw  << match this
    wwwl  << match this
    llll"
    

    数据:

    string = 
    "wwww
    lwlw
    lwww
    wlww
    wwlw
    wwwl
    llll"
    

    输出:

    output = 
    "lwww
    wlww
    wwlw
    wwwl"
    

    我认为,在这种情况下,似乎最好采用显而易见的做法。我很好奇是否存在一个较短的正则表达式。

    var str =
    `wwww
    lwlw
    lwww
    wlww
    wwlw
    wwwl
    llll`;
    
    str.match(/\bwlww\b|\blwww\b|\bwwlw\b|\bwwwl\b/g);
    
    (4) ["lwww", "wlww", "wwlw", "wwwl"]
    
    3 回复  |  直到 8 年前
        1
  •  2
  •   gurvinder372    8 年前

    如果您对非正则表达式解决方案没有意见,请尝试 split filter

    因此,匹配应该有4个字符->3x宽和1x长

    您可以检查 length 更换后 l 的和 w 's。

    分裂 数据由 换行符,换行符 然后 滤器 找出那些不匹配的

    var str =
    `wwww
    lwlw
    lwww
    wlww
    wwlw
    wwwl
    llll`;
    //this function checks if the length of string after replace is equal to length
    var replChLen = (str, ch, length) => 
        str.replace( new RegExp( ch, "g" ), "" ).length == length;
    
    //filter out the matches
    var output = str.split( "\n" ) //split by line-break
       .filter( s => //iterate to filter
          replChLen(s, "l", s.length - 1) //check if after replacing l, length is reduced by 1
            && replChLen(s, "w", s.length - 3) ); //check if after replacing w, length is reduced by 3
    console.log( output );
        2
  •  2
  •   mplungjan    8 年前

    过滤它?

    var string = 
    `wwww
    lwlw
    lwww
    wlww
    wwlw
    wwwl
    llll`;
    var pattern = ["lwww","wlww","wwlw","wwwl"];
    
    var vals = string.split(/\s/).filter(function(row) {
      row = row.trim();
      return pattern.indexOf(row)!=-1;
    })
    console.log(vals)

    没有阵列模式:

    var string = 
    `wwww
    lwlw
    lwww
    wlww
    wwlw
    wwwl
    llll`;
    
    var vals = string.split(/\s/).filter(function(row) {
      return "lwww"=== row.trim().split("").sort().join("");
    })
    console.log(vals)
        3
  •  0
  •   Andre Elrico    7 年前

    正确答案是:

    (?=(?:.*w){3})(?=(?:.*l)).{4}
    

    看见 H E R E