使用javascript从给定字符串中获取字符串的一部分的最佳方法是什么

时间:2015-04-24 04:37:08

标签: javascript jquery regex

我在JavaScript中有一个字符串,如下所示:

var str = "1:A;2:B;3:A;4:c;5:D";

如何在2前面检索选项,即B

目前我通过每隔;分割字符串来使用for循环, 但我想知道是否有更好的方法来实现这一目标而不使用循环概念。

6 个答案:

答案 0 :(得分:0)

如果你想在2前面选择,你可以使用:

  1. 一个循环(在我的选项中首选)
  2. indexOf
  3. 使用Javascript:

     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];

Fiddle

这使用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);

Fiddle

类似

子字符串答案更容易理解,但以下内容相同 ish

var num = '2',
    string = "1:A;2:B;3:A;4:c;5:D";

string[string.indexOf(num+':')+num.length+1];

Fiddle

防呆

这应该适用于大多数情况。 如果长度超过一个字母

,也可以选择此选项
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)

如果您知道这将是一种模式,您可以使用以下内容:

&#13;
&#13;
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;
&#13;
&#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()在内部使用循环。循环没有问题,几乎每个编写的程序都至少有一个循环。