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

p5fdfcr1  于 2023-08-08  发布在  Java
关注(0)|答案(6)|浏览(128)

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

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

字符串
如何检索2前面的选项,即B
目前我使用for循环通过每;拆分字符串来实现这个,但我想知道是否有更好的方法来实现这一点而不使用循环概念。

rryofs0p

rryofs0p1#

您可以使用split函数,如下所示;

var str = "1:A;2:B;3:A;4:c;5:D";
var result = str.split(":");

document.getElementById("Location").innerHTML = res[2];

字符串

2hh7jdfx

2hh7jdfx2#

如果你知道这将是一个模式,你可以使用类似于:

var str = "1:A;2:B;3:A;4:c;5:D";
var i = 2;
console.log(str[str.indexOf(i)+2]);
//Output "B"

字符串

krugob8w

krugob8w3#

如果你想得到2前面的选项,你可以使用:
1.一个循环(我的首选)
1.第一个月

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)
 }

字符串

zyfwsgd6

zyfwsgd64#

可能递归的方法对你有帮助。

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

字符串

ioekq8ef

ioekq8ef5#

RegExp

var num = '2';
"1:A;2:B;3:A;4:c;5:D".match((new RegExp(num+"\\:([\\S\\s]+?)\\;", "")))[1];

字符串
Fiddle
它使用RegExp (正则表达式) 它的作用是在字符串中查找'2',然后获取与之关联的选项

子串

我想不出更好的词,所以请原谅我。可以使用substring和**.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

相似

子字符串答案更容易理解,但下面的代码也是如此

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(我把它写成了一行程序)

wljmcqd8

wljmcqd86#

看起来很直接?

console.log(string.match(/(^|;)2:(\w*)/)[2]);

字符串

相关问题