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

问题描述 投票:0回答:2

我正在尝试编写一个正则表达式,如果它与下面的格式匹配,它将返回

true
,否则,它应该返回
false
。它应该只允许以下单词:

正匹配(返回true)

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

负匹配(返回 false 或 null)

注意:

A
之后缺少
U

UA-1234-1,U-12345-2

当传递给正则表达式的字符串是时,它应该总是给我 true

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)

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

javascript regex search match
2个回答
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));
}


-2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.