javascript正则表达式应以有效匹配结尾

时间:2019-01-28 11:26:09

标签: javascript regex

我需要确定输入是否以正确的格式结束,我已经将此正则表达式再次编写为

var inp_values = '<@448746017987231756> 3 <@533932209300832266> 5 <@440684023463804938> 7'

var res = inp_values.match(/<@(\d*)> \d*/g)
console.log(res);
[ '<@448746017987231756> 3',   '<@533932209300832266> 5',   '<@440684023463804938> 7' ]

但是我希望当值是

时返回false
var inp_values = '<@448746017987231756> 3 <@533932209300832266> 5 <@440684023463804938> 7 @alphatext 5'

所以我尝试将$附加到正则表达式上

 inp_values.match(/<@(\d*)> \d*$/g);

但是对于第一种情况它只返回一个值

2 个答案:

答案 0 :(得分:1)

您可以使用RegEx.prototype.test()函数,如果正则表达式找到1个或多个正匹配项,则返回true;如果找不到结果,则返回false

String.prototype.match()函数正在字符串中寻找匹配项并返回结果数组。

var regEx = /<@(\d*)> \d*$/g;

var inp_values = '<@448746017987231756> 3 <@533932209300832266> 5 <@440684023463804938> 7'
console.log("inp_values test return: " + regEx.test(inp_values));
console.log("inp_values match return: " + inp_values.match(regEx));

var inp_values2 = '<@448746017987231756> 3 <@533932209300832266> 5 <@440684023463804938> 7 @alphatext 5'
console.log("inp_values2 test return: " + regEx.test(inp_values2));
console.log("inp_values2 match return: " + inp_values2.match(regEx));

答案 1 :(得分:1)

如果您需要验证字符串是否包含模式,则可以将其与第一个值匹配,然后在前面加上空格将其重复。

如果单个值也是一个值,则可以使用非捕获组(?: <@(\d*)> \d*)*将其重复0次以上。

如果它至少发生2次,则可以重复1次以上。

<@(\d*)> \d*(?: <@(\d*)> \d*)*$

请参见regex101 demo

[
  "<@448746017987231756> 3 <@533932209300832266> 5 <@440684023463804938> 7",
  "<@448746017987231756> 3 <@533932209300832266> 5 <@440684023463804938> 7 @alphatext 5"
].forEach(s => {
  console.log(/<@(\d*)> \d*(?: <@(\d*)> \d*)*$/.test(s) + " => " + s);
});