如何在比字符串开头还高的位置找到Javascript字符串中子字符串的索引?

时间:2019-05-20 23:37:04

标签: javascript jquery

我正在尝试使用javascript / jquery进行一些字符串操作。

如何找到字符串中子字符串的位置,该位置从字符串中间的某个位置开始?

考虑以下字符串:

"Item1 100 Item2 200"

如果我知道字符串中“ 100”的起始位置(“ 1”的位置)的索引,我如何找到此后出现的第一个空格的索引?

所以我真正要寻找的是出现在“ 200”之前的空格的索引。

我知道在C#/ VB.Net中有强大的字符串库,可让我轻松地对字符串进行切片和切块。

如何使用jquery / javascript完成此操作?

谢谢, 约翰·B

3 个答案:

答案 0 :(得分:2)

indexOf()采用第二个参数来指示从何处开始。因此,如果您知道要从哪里开始,则可以将其传递给:

let s = "Item1 100 Item2 200"
let i100 = 6                   // known index of 100

let ind = s.indexOf(" ", i100) // start looking at 6
console.log(ind)

答案 1 :(得分:0)

  

“因此,我真正要寻找的是出现在“ 200”之前的空格的索引。”

如果计划索引空间,则引用100的位置应为3,无论哪种方式,100之后的空间都不是200之前的空间。因此,我将接受您的第二条语句作为谓词。

findSpace(字符串,术语,开始,之后)

参数1:字符串进行搜索
参数2:术语字符串以查找
参数3:开始索引从其开始-默认为0
参数4:之后在条件后找到空格-默认为false

如果找到子字符串,它将在空格之前找到空格,并返回该空格的索引。

将每个空间都包含为数组元素的关键是将捕获空白的正则表达式传递给.split((\s))方法的分隔符。然后使用.indexOf()方法提取给定项-1的索引。

var string = "Item1 100 Item2 200 Item11 1100 Item32 8010";

function findSpace(string, term, start = 0, after = false) {
  var arrayA = string.split(/(\s)/);
  console.log(arrayA);
  let index = arrayA.indexOf(term, start);
  return after ? index + 1 : index - 1;
}

console.log(findSpace(string, '200', 1, false));

答案 2 :(得分:0)

如果要查找所有“空间”实例的索引,则可以在indexOf()函数中使用for循环。

希望代码段有助于提出想法。

button {
  margin: 5px;
  padding: 4px;
}

#index {
  margin-left: 10px;
}
<button onclick="find();">
Reveal indices
</button>
<br>
<p id="index"></p>

<script>
  function find() {
    var str = "Item1 100 Item2 200";
    var j = [];
    var i = 0;

    for (i = 0; i <= str.length; i++) {
      var n = str.indexOf(" ", i);
      const isInArray = j.includes(n);
      if (!isInArray && n > 0) {
        j.push(n);
      }
    }
    document.getElementById("index").innerHTML = j;
  }

</script>