Javascript 将第一组数字与字符串分开的最不容易出现问题的方法是什么?

Javascript 将第一组数字与字符串分开的最不容易出现问题的方法是什么?,javascript,Javascript,对于上下文,我有一个系统,要求用户给出1-10之间的评级。之后,我让他们选择留下他们想留下的任何额外的笔记 不幸的是,似乎有一半的情况是,客户会在最初的1-10评级时留下备注。在我使用的界面中,我无法将输入限制为仅数字 最好的解决方案是将语句中的数字分成两个单独的变量或数组[0-1] 所以基本上我有 var responseA = (customer input here) 然后,我需要删除他们在第一个响应中添加的任何附加注释 responseA = responseA.someMagic()

对于上下文,我有一个系统,要求用户给出1-10之间的评级。之后,我让他们选择留下他们想留下的任何额外的笔记

不幸的是,似乎有一半的情况是,客户会在最初的1-10评级时留下备注。在我使用的界面中,我无法将输入限制为仅数字

最好的解决方案是将语句中的数字分成两个单独的变量或数组[0-1]

所以基本上我有

var responseA = (customer input here)
然后,我需要删除他们在第一个响应中添加的任何附加注释

responseA = responseA.someMagic() //This is where I need help
并继续处理剩余的交互,并将其存储

var responseB = responseA[1] + ". " + (customer input 2 here)
这将获取包含注释的第一个响应的第二部分,并将这些注释与包含注释第二部分的第二个响应相结合。如果有可能找到某种方法来检测是否有注释,那么最好避免

". Thank you."
相对于

"Thank you."
因为在某些情况下第一个字符串是串联的,所以不需要

编辑:在重读这篇文章之后,如果你不知道到底发生了什么,它似乎仍然令人困惑。让我向您展示一个真实世界的示例:

问题1:请给出1-10之间的评级: “10!你帮了大忙,谢谢!”

问题2:如果您有任何笔记,可以将其留在这里: “非常有帮助。”


这意味着,当处理问题1的评分的系统接收到额外的字符串时,它不会将其作为一个数字来计算。我想删除10之后的所有内容,并将其添加到Q2的响应中,以避免丢失任何响应,同时也不会将其存储在错误的位置。

这里有一种可能性,使用正则表达式检查并拆分第一个值:

const combineResponses=(q1,q2)=>{
常量匹配=q1.match(/^(\d*)\W*(.*)/)
返回匹配项[2]{
评级:匹配[1],
注释:[匹配[2],q2]。加入('.'))
} : {
评级:匹配[1],
评论:第二季度
}
}
console.log(组合响应(
“10!你帮了大忙,谢谢!”,
“非常有帮助。”
))
console.log(组合响应(
"10", 
“非常有帮助。”
))
console.log(组合响应(
“哎呀”,
“非常有帮助。”

))
这里有一种可能性,使用正则表达式检查并拆分第一个值:

const combineResponses=(q1,q2)=>{
常量匹配=q1.match(/^(\d*)\W*(.*)/)
返回匹配项[2]{
评级:匹配[1],
注释:[匹配[2],q2]。加入('.'))
} : {
评级:匹配[1],
评论:第二季度
}
}
console.log(组合响应(
“10!你帮了大忙,谢谢!”,
“非常有帮助。”
))
console.log(组合响应(
"10", 
“非常有帮助。”
))
console.log(组合响应(
“哎呀”,
“非常有帮助。”

))
如果您确定字符串总是以一个数字开头,您可以调用字符串上的
parseInt()
,以了解该数字是什么。如果有一个数字,那么您可以使用
indexOf()
来查找它第一次出现的时间,并在那里剪切字符串,否则只需假设整个内容是一个字符串

constuserinputs=['1谢谢你','10谢谢','5.随机文本','没有评级'];
设长度=1;
let指数;
让评级;
让我们回应;
for(用户输入的常量i){
评级=parseInt(i);
如果(评级){
如果(评级>9){
长度=2;
}
指数=i.indexOf(评级);
响应=i.子字符串(索引+长度).trim();
}否则{
响应=i;
}
log(`${i},评级:${rating},响应:${response}`);

}
如果您确定字符串总是以一个数字开头,您可以调用字符串上的
parseInt()
,以了解该数字是什么。如果有一个数字,那么您可以使用
indexOf()
来查找它第一次出现的时间,并在那里剪切字符串,否则只需假设整个内容是一个字符串

constuserinputs=['1谢谢你','10谢谢','5.随机文本','没有评级'];
设长度=1;
let指数;
让评级;
让我们回应;
for(用户输入的常量i){
评级=parseInt(i);
如果(评级){
如果(评级>9){
长度=2;
}
指数=i.indexOf(评级);
响应=i.子字符串(索引+长度).trim();
}否则{
响应=i;
}
log(`${i},评级:${rating},响应:${response}`);

}
您为什么不直接使用一个?还是10个单选按钮?@melpomene:你怎么知道源代码是HTML?即使是,你能不能不认真对待,“我使用的界面无法将输入限制为数字”@ScottSauyet我很认真,这就是为什么我建议使用不同的界面。我之所以使用HTML,是因为OP使用的是JavaScript(如果不在浏览器中运行,为什么要使用JS?),并且没有说任何相反的话(这是一个“困惑的新手”问题,也适用于不完整的标记),这似乎是一个NPS问题,在网站上是有意义的。@melpomene:有趣,我读的完全不同。正如“我别无选择,只能使用这个界面”中所说的那样。显然,它也可以,但我有经验使用不可更改的数据源,我必须充分利用这些数据源;这可能就是我为什么这么听的原因。注意,我想,JS在很多地方使用,而不仅仅是在浏览器中。@ScottSauyet你是对的,我无法使用不同的界面。HTML代码在这种情况下对我没有帮助。我使用Javascript将字符串从一台服务器传递到另一台服务器。原始接口无法更改。为什么不使用一个?还是10个单选按钮?@melpomene:你怎么知道源代码是HTML?即使是这样,你能不能不认真对待,“我使用的界面无法将输入限制为数字”?@ScottSauyet我是