我在JavaScript中有一个字符串,如下所示:
var str = "1:A;2:B;3:A;4:c;5:D";
如何在2
前面检索选项,即B
。
目前我通过每隔;
分割字符串来使用for循环,
但我想知道是否有更好的方法来实现这一目标而不使用循环概念。
答案 0 :(得分:0)
如果你想在2前面选择,你可以使用:
indexOf
function getAnswer(str) {
var position = str.indexOf(';2:')
// not found in string, or '2' is the first answer
if(position === -1) {
return;
}
return str.substring(position - 1, position)
}
答案 1 :(得分:0)
var num = '2';
"1:A;2:B;3:A;4:c;5:D".match((new RegExp(num+"\\:([\\S\\s]+?)\\;", "")))[1];
这使用RegExp (正则表达式)这样做会在字符串中查找“2”,然后获取与之关联的选项
我想不出一个更好的词,所以请原谅我。您可以使用子字符串和 .indexOf()
var num = '2',
string = "1:A;2:B;3:A;4:c;5:D",
index = string.indexOf(num+':');
string.substring(index+num.length+1,index+num.length+2);
子字符串答案更容易理解,但以下内容相同 ish
var num = '2',
string = "1:A;2:B;3:A;4:c;5:D";
string[string.indexOf(num+':')+num.length+1];
这应该适用于大多数情况。 如果长度超过一个字母
,也可以选择此选项var string = "1:A;2:B;3:A;4:c;5:D",
num = '2',
result;
if (string.indexOf(';'+num+':') < 0) {
result = string.match(new RegExp(num+"\\:([\\S\\s]+?)\\;", ""))[1];
} else {
result = string.match((new RegExp('\\;'+num+"\\:([\\S\\s]+?)\\;", "")))[1];
}
更短的:
var string = "1:A;2:B;3:A;4:c;5:D", num = '2', result = string.indexOf(";"+num+":") < 0? string.match(new RegExp(num+"\\:([\\S\\s]+?)\\;",""))[1] : string.match(new RegExp("\\;"+num+"\\:([\\S\\s]+?)\\;",""))[1];
alert(result);
Fiddle (我已将其作为一个单行)
答案 2 :(得分:0)
您可以使用split功能,如下所示;
var str = "1:A;2:B;3:A;4:c;5:D";
var result = str.split(":");
document.getElementById("Location").innerHTML = res[2];
答案 3 :(得分:0)
如果您知道这将是一种模式,您可以使用以下内容:
var str = "1:A;2:B;3:A;4:c;5:D";
var i = 2;
console.log(str[str.indexOf(i)+2]);
//Output "B"
&#13;
答案 4 :(得分:0)
可能是递归方式帮助你。
var str = "1:A;2:B;3:A;4:c;5:D",
arr = str.split(";"),
len = arr.length;
function getVal(len){
if(len !== 0){
getVal(len-1);
if(arr[len-1].indexOf(2) === 0){
console.log(arr[len-1].split(":")[1])
};
};
};
getVal(len);
答案 5 :(得分:-3)
循环没有错,最终即使您的代码没有循环,计算机上的某些内容也必须循环遍历字符串才能执行此操作。无论如何,如果你不想在你的代码中循环,你可以这样做:
var str, new_str, start_position, end_position, final_result;
str = "1:A;2:B;3:A;4:c;5:D"; // or another similar string
new_str = ";" + str + ";" // add at the beginning and end, in case the string starts or ends with 2:SOMETHING, we still want to find it with indexOf below
start_position = new_str.indexOf(";2:");
if (start_position > -1) { // we found a 2
start_position = start_position + 3; // move past the ";2:"
end_position = new_str.indexOf(";", start_position); // first ";" after the start_position
final_result = new_str.substring(start_position, end_position);
}
但是,这仍然是循环的,因为indexOf()
在内部使用循环。循环没有问题,几乎每个编写的程序都至少有一个循环。