我需要确定输入是否以正确的格式结束,我已经将此正则表达式再次编写为
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' ]
但是我希望当值是
时返回falsevar inp_values = '<@448746017987231756> 3 <@533932209300832266> 5 <@440684023463804938> 7 @alphatext 5'
所以我尝试将$附加到正则表达式上
inp_values.match(/<@(\d*)> \d*$/g);
但是对于第一种情况它只返回一个值
答案 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*)*$
[
"<@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);
});