JavaScript-使用string.indexOf()检查父字符串中首先出现的子字符串

JavaScript-使用string.indexOf()检查父字符串中首先出现的子字符串,javascript,Javascript,我有一个很长的“父”字符串(大约2000个字符)。 我想找出两个“子”字符串(或子字符串)中的哪一个先出现。 到目前为止,我一直在使用string.indexOf(): /*变量*/ var parentString=“Lorem foo ipsum door sit bar amet,concetetur adipising elit,…” var firstSubstring=“foo” var secondSubstring=“bar” var firstSubstringLength=

我有一个很长的“父”字符串(大约2000个字符)。
我想找出两个“子”字符串(或子字符串)中的哪一个先出现。 到目前为止,我一直在使用
string.indexOf()

/*变量*/
var parentString=“Lorem foo ipsum door sit bar amet,concetetur adipising elit,…”
var firstSubstring=“foo”
var secondSubstring=“bar”
var firstSubstringLength=firstSubstring.length
var secondSubstringLength=secondSubstring.length
var searchIndex=0
var continuationIndex=0
/*搜索子字符串*/
//检查子字符串是否存在
if(parentString.indexOf(firstSubstring,searchIndex)>-1){
log(“第一个子字符串在父字符串中首先出现”)
//使编译器从firstSubstring结尾继续搜索“
searchIndex=parentString.indexOf(firstSubstring,continuationIndex)
continuationIndex=searchIndex+firstSubstringLength
}
//检查子字符串是否存在
if(parentString.indexOf(secondSubstring,searchIndex)>-1){
log(“第二个子字符串出现在父字符串中的第二个”)
//使编译器从secondSubstring结尾继续搜索“
searchIndex=parentString.indexOf(secondSubstring,continuationIndex)
continuationIndex=searchIndex+secondSubstringLength

}
在与第二个子字符串的位置进行比较之前,只要找到第一个子字符串,就可以打印第一个子字符串

对它们中的每一个使用
indexOf()
,然后比较它们的索引

/*变量*/
var parentString=“Lorem foo ipsum door sit bar amet,concetetur adipising elit,…”
var firstSubstring=“foo”
var secondSubstring=“bar”
var firstSubstringLength=firstSubstring.length
/*搜索子字符串*/
var firstIndex=parentString.indexOf(firstSubstring);
var secondIndex=parentString.indexOf(secondSubstring);
如果(第一个索引>-1和第二个索引>-1){
if(secondIndex>=firstIndex+firstSubstringLength){
log(“第二个子字符串出现在父字符串中的第二个”);
}否则{
log(“父字符串中第二个子字符串未出现”);
}
}else if(firstIndex==-1){
log(“在父字符串中未找到firstSubstring”);
}否则{
log(“在父字符串中未找到第二个子字符串”);

}
使用正则表达式替换来测量每个子字符串第一次出现的位置:

var parentString=“Lorem foo ipsum door sit bar amet,concetetur adipising elit,…”;
var foo_index=parentString.replace(/^(.*)foo\b.*$/,“$1”).length;
var bar_index=parentString.replace(/^(.*)bar\b.*$/,“$1”).length;
如果(foo_指数
希望它能帮助您

var parentString = "Lorem foo ipsum dolor sit bar amet, consectetur adipiscing elit,..."

var firstSubstring = "foo"
var secondSubstring = "bar"

var firstStringIndex = parentString.indexOf(firstSubstring);
var secondStringIndex = parentString.indexOf(secondSubstring);

firstStringIndex>secondStringIndex ? console.log(secondStringIndex) : console.log(firstStringIndex); 

虽然我相信最好的答案已经公布,但另一种选择是使用正向前瞻正则表达式(尽管在这种情况下,它们可能会稍微增加计算成本——但是,可能会提供更简洁的代码——但是冗长并不是一件坏事,所以我仍然坚持使用indexOf)

比如说,

const ss1index = parentString.indexOf(substring1);
const ss2index = parentString.indexOf(substring2);

const retest = new RegExp(substring1 +'(?='+ substring2 +')');
const ss1test = retest.test(parentString);

if (ss1index > -1) {
  if (ss2index > -1) {
  // substring 1 and 2 were both found in parent
    // You could rewrite the logic so you actually store the indexOf value if you need it.
    if (ss1test) // substring1 is first
    else substring2 is first
  }
}