代码之家  ›  专栏  ›  技术社区  ›  Mallu Golageri

如何在javascript中只允许某些单词与正则表达式连续出现

  •  0
  • Mallu Golageri  · 技术社区  · 7 年前

    我正在写一个正则表达式,它将返回 true 如果与下面的格式匹配,则应返回 false . 它只允许以下文字:

    正匹配 (返回true)

    UA-1234-1,UA-12345-2,UA-34578-2
    

    负匹配 (返回false或null)

    注: A 在之后丢失 U

    UA-1234-1,U-12345-2
    

    当传递给正则表达式的字符串为 UA-1234-1,UA-12345-2,UA-34578-2,...........

    下面是我试图做的,但它只匹配第一个元素,不返回null。

    var pattern=/^UA-[0-9]+(-[0-9]+)?/g;
    
    pattern.match("UA-1234-1,UA-12345-2,UA-34578-2");
    
    pattern.exec("UA-1234-1,UA-12345-2,UA-34578-2)
    

    提前谢谢。非常感谢您的帮助。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Wiktor Stribiżew    7 年前

    您需要的模式是一个带有锚的模式( ^ $ , 然后是方块图案。

    看起来像 /^BLOCK(?:,BLOCK)*$/ . 您可以在两者之间引入可选的空白,例如。 /^BLOCK(?:,\s*BLOCK)*$/ .

    最后,该模式看起来像 ^UA-[0-9]+(?:-[0-9]+)?(?:,UA-[0-9]+(?:-[0-9]+)?)*$

    const block = "UA-[0-9]+(?:-[0-9]+)?";
    let rx = new RegExp(`^${block}(?:,${block})*$`); // RegExp("^" + block + "(?:," + block + ")*$") // for non-ES6
    let tests = ['UA-1234-1,UA-12345-2,UA-34578-2', 'UA-1234-1,U-12345-2'];
    for (var s of tests) {
      console.log(s, "=>", rx.test(s));
    }
        2
  •  -2
  •   Calvin Taylor    7 年前

    用逗号分割字符串,然后测试每个元素。