0

私は次のようなコンテンツを持っています

リンゴは、バラ科(バラ科)のリンゴの木、Malusdomestica種の気まぐれな果実です。これは最も広く栽培されている果樹の1つであり、リンゴは人間が使用するマルス属の多くのメンバーの中で最も広く知られています。リンゴは小さな落葉樹で育ちます。

私は次のような配列を持っています

["apple", " ", "is", " ", "the"];

この配列を使用して、アップルという単語の開始インデックスと終了インデックスを見つける方法は、javascriptにありますか?

コンテンツをループして使用してindexOfみましたが、単語のすべてのインデックスを取得できませんでした

これは私が試したものです

var matchs =[];
var content = "a b c defgh a b csdwda abcdfd";
var arrayWord =["a"," ", "b"];
var w =0;
var pos =0;
var firstIndex = content.indexOf(arrayWord[w],pos);
pos = firstIndex;
while (pos > -1) {
    pos+=arrayWord[w].length;
    w++; 
    pos = content.indexOf(arrayWord[w], pos);
    matchs.push(firstIndex,pos);
}
4

3 に答える 3

1

あなたのコメントを読んだ後、私はこれがあなたが求めているものだと思います。必要に応じて、replaceステートメントをさらに追加できます。

var text,
    pos,
    start,
    matches = [],
    charArr,
    charText,
    currentMatch;

text = $("h5").text( );

//white spaces must match length of string being replaced
text = text.replace("\r\n","    ");
charText = text.split("");

charArr = ["apple", " ", "is", " ", "the"].join("").split("");
currentMatch = 0;

// Loop through char array ignoring multiple white spaces
for( pos = 0; pos < text.length; pos += 1 ) {

    if( currentMatch === 0 ) start = pos;

    if( charText[pos] === charArr[currentMatch] ) {
        currentMatch += 1;      
    } else if( charText[pos] !== " " ) {
        currentMatch = 0;
    }

    // matched entire array so push to matches
    if( currentMatch === charArr.length ) {     
        matches.push( [ start, pos] );
        currentMatch = 0;
    }
}

ここでフィドル

于 2012-08-14T16:45:11.907 に答える
0

私があなたの質問を正しく理解したと仮定するとjoin、配列を作成しindexOf、文字列のメソッドを使用して開始インデックスを取得できます(この例では、文字列がに格納されstr、配列がに格納されていると想定していますarr):

var start = str.indexOf(arr.join(""));

join配列からスペースを取り除き、代わりにスペースをに渡して、より小さな配列にすることもできます。

于 2012-08-14T10:59:18.830 に答える
0
var text = $("h5").text(); // Get the text from your h5.
var searchText = "apple is the";
var found = []
function findAll(string) {
  var startIdx = string.search(searchText);
  var endIdx = startIdx + searchText.length;
  if(startIdx == -1) {
    return;
  }
  else {
    found.append([startIdx, endIdx]);
    findAll(string.substring(endIdx, string.length));
  }
}
findAll(text);

searchTextこれにより、のすべてのインスタンスが見つかるまで文字列が再帰的に検索されます。

各オカレンスは、開始インデックスと終了インデックスのリストとして保存されます[[start, end],[start,end],...]found

于 2012-08-14T11:03:26.893 に答える