2012-08-14 27 views
0

我有一個內容,如搜索在JavaScript文本,並得到其所有的開始和結束索引

蘋果是蘋果樹的梨果果,種蘋果 家蠅在薔薇科(薔薇科)。它是最廣泛種植的樹果實之一,蘋果是人類使用的許多蘋果屬(Malus)成員已知的良好和最廣泛的。 蘋果生長在小的落葉樹上。

我有一個像

["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); 
} 
+0

,因爲我不能確定你所說的「內容」指的是我沒有格式化你的問題。你在文本中使用了'h5'標籤,你實際上是否在頁面上有文本,或者你是否只有一個字符串,並試圖用'h5'標籤格式化它?請閱讀http://stackoverflow.com/editing-help – 2012-08-14 10:58:49

+0

我只是有一個字符串和格式化與h5 – Samy 2012-08-14 11:04:16

回答

1

列表中讀取您的意見後。如有必要,您可以添加更多的替換語句。

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

小提琴here

+0

謝謝布魯諾:) ..其工作很好 – Samy 2012-08-16 10:39:06

+0

你'歡迎:) – Bruno 2012-08-16 11:24:02

0

假設我理解正確的話您的問題,可以使用join該數組並使用字符串的indexOf方法獲取起始索引(此示例假定您的字符串存儲在str中,並且您的數組存儲在arr中):

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

您也可以擺脫陣列中的空間,並將空間傳遞給join而不是小陣列。直到searchText所有實例發現

+0

我不能加入陣列和搜索,實際上我的內容可能包含像\ n \ r等不需要的空間,我需要跳過那也和搜索這是你使用數組 – Samy 2012-08-14 11:08:55

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

這將遞歸搜索的字符串。

我想這是你所追求的每次出現被存儲爲開始和結束索引[[start, end],[start,end],...]found

+0

亞,但我需要indexOf所有的事件 – Samy 2012-08-14 11:24:07

+0

好吧,看看我的編輯。這是找到'字符'索引,而不是字符串索引。 – Aesthete 2012-08-14 11:37:18

+0

謝謝Esthete,如果我使用sting.search(),我會跳過這個詞像蘋果是\ n我也需要匹配相同的詞有不需要的空間 – Samy 2012-08-14 11:41:08

相關問題