Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:如何测试字符串是否包含2个值之间的整数?_Javascript_Discord.js - Fatal编程技术网

Javascript:如何测试字符串是否包含2个值之间的整数?

Javascript:如何测试字符串是否包含2个值之间的整数?,javascript,discord.js,Javascript,Discord.js,我目前正在使用javascript编写一个discord机器人,我想测试一条消息是否包含一个小时。我设法这样做了 var content = msg.content.toLowerCase(); // Get the content on the message const nbs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; var hours; nbs.forEach(number => { if(content.inclu

我目前正在使用javascript编写一个discord机器人,我想测试一条消息是否包含一个小时。我设法这样做了

var content = msg.content.toLowerCase();    // Get the content on the message
const nbs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var hours;
nbs.forEach(number => {
        if(content.includes(`${number}am`)) hours = `${number}AM`;  
        else if(content.includes(`${number}pm`)) hours = `${number}PM`;
})
但我的问题是,在这个例子中,我无法检测小时是否包含分钟,例如上午10:15。我想做另一个包含1到59个整数的数组,在我已经有的数组中做另一个forEach,但我担心这会让代码慢很多

有没有一种方法可以测试消息是否包含两个值之间的int,这样我就可以得到这样的结果

content.includes(`${hr}:${min}am`)

您可以使用正则表达式:

函数getTime(消息){
const result=message.match(/(\d{1,2}):(\d{2})\s*(am | pm)/i);
如果(结果){
返回{
小时数:个数(结果[1]),
会议记录:编号(结果[2]),
格式:结果[3],
}
}否则{
返回null;
}
}
log(getTime(“hello 2:13AM”);
log(getTime(“hello 19:55 pm”);

log(getTime(“hello”)使用正则表达式获取时间。 我建议您使用以下方法:

/([0-2][0-9])\:([0-6][0-9])(?:\s*)?(am|pm)?/
现在我将介绍正则表达式的所有部分:

([0-2][0-9])
-使用第一个捕获组,您将能够获得从00到24的值(老实说,是29),但它可以做到这一点

\:
-将捕获分隔符,在本例中为双冒号

([0-6][0-9])
-将捕获00到69之间的数字

(?:\s*)?(am | pm)?
-最后但并非最不重要的捕获am或pm。这是完全可选的。如果有人以24小时格式写入,正则表达式还将捕获没有am或pm的时间

let content='some content上午10:00…';
content=content.toLowerCase();
控制台日志(内容);
常数时间(regex=/(0-2][0-9)\:([0-6][0-9])(?:\s*)?(上午|下午)?/;
if((m=time_regex.exec(content))!==null){
//可以通过'm`-变量访问结果。
m、 forEach((匹配,组索引)=>{
insertAdjacentHTML('beforebeagin',`找到匹配项,组${groupIndex}:${match}

`); });
}
在匹配函数中使用正则表达式,如content.match(/\d+/g)@ArayniMax它只会将内容存储为所有大写字母,而不是所有小写字母。它不会改变很多内容believe@ShafeequeTP我必须学习JS正则表达式是如何工作的,我会试试的,谢谢you@JohanDaniel去做吧,那会值得你花时间的。非常感谢你的解释!我试图自己创建一个正则表达式,但失败了