2012-08-14 71 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

相关问题