如何在javascript中仅使用正则表达式连续使用某些单词

时间:2017-11-13 15:38:12

标签: javascript regex search design-patterns match

如果匹配下面的格式,我试图编写一个将返回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 个答案:

答案 0 :(得分:0)

你需要的模式是一个用锚点(^ - 字符串的开头和$ - 字符串的结尾)包含的模式,它首先匹配你的模式(最初的“块”)然后匹配0后出现,后跟块模式。

看起来像/^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));
}

答案 1 :(得分:-2)

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