2014-11-14 49 views
0

所以我設法提取一些文本,然後將其保存爲一個變量供以後使用,我如何測試所述文本中的某些關鍵字?在提取的文本中搜索關鍵字javascript

下面是一個示例,checkTitle是我提取的文本,我想在特定關鍵字(在本示例中爲compareTitle內由逗號分隔的文字)中搜索它。我想搜索字符串'5''monkeys'

var checkTitle = "5 monkeys jumping on the bed"; 
var compareTitle = "5 , monkeys"; 

if (checkTitle === compareTitle) { 
    // ... 
} 
+0

正則表達式? – 2014-11-14 17:28:36

回答

0

您可以使用regular expressions搜索字符串,並test()功能,如果字符串包含的話返回真/假。

/(?:^|\s)(?:(?:monkeys)|(?:5))\s+/gi.test("5 monkeys jumping on the bed"); 

將返回true,因爲該字符串包含(在這種情況下,兩者)單詞5和猴子。

查看我的示例:http://regexr.com/39ti7使用網站的工具來分析正則表達式的每個方面。

如果你需要改變你的每一次測試的話,那麼你可以使用此代碼:

function checkForMatches(){ 
    var words = checkTitle.split(" , "); 
    var patt; 
    for (var i = 0; i < words.length; i++){ 
    patt = patt + "(" + words[i] + ")|"; 
    } 
    patt[patt.length-1] = ""; 
    patt = new RegExp(patt, "i"); 
    return patt.test(checkTitle); 
} 

將返回true,並允許你想對被檢查的任何話。他們必須分開這樣的:

compareText = "word1 , word2 , word3 , so on , ..."; 
//     ^^^notice, space-comma-space. 

如果聲明這樣你可以使用它在:

var checkTitle = "5 monkeys jumping on the bed"; 
var compareTitle = "5 , monkeys"; 
if (checkForMatches()){ 
    //a match was found! 
} 
+0

感謝您的幫助,生病嘗試一下。 – Matt 2014-11-15 01:16:39

+0

我有一個問題,我可以使用.contains()方法,而不是在我提取的文本中查找字符串,我可以在數組中添加關鍵字? – Matt 2014-11-15 04:42:16

+0

是的。我將爲這個新的(ish)問題創建一個新的答案。 – theonlygusti 2014-11-15 11:09:12

0

使用String.prototype.contains()方法,你可以搜索字符串中的子字符串。例如,

"Hi there everyone!".contains("Hi");  //true 
"Hi there everyone!".contains("there e"); //true 
"Hi there everyone!".contains("goodbye"); //false 

您還可以使用Array.prototype.indexOf()到類似的效果:

("Hi there everyone!".indexOf("Hi") > -1) //true 
("Hi there everyone!".indexOf("Hmmn") > -1) //false 

然而,在這種方法中,我們甚至不需要使用任何上述方法,爲.match()方法將爲我們完成所有操作:

要返回匹配關鍵字的數組,請使用.match()。它接受一個正則表達式作爲參數,並返回一個匹配正則表達式的子串的數組。

var checkTitle = "5 monkeys jumping on the bed"; 
var compareTitle = "5 , monkeys"; 
/*     ^^^ 
    It is very important to separate each word with space-comma-space */ 

function getWords(str){ //returns an array containing key words 
    return str.split(" , "); 
} 

function matches(str, words){ 
    var patt = ""; 
    for (var i = 0; i < words.length; i++){ 
    patt = (i > 0)? patt + "|" + "(" + words[i] + ")" : patt + "(" + words[i] + ")"; 
    } 
    patt[patt.length-1] = ""; 
    patt = new RegExp(patt, 'gi'); 
    //      ^i makes it case-insensitive 
    return str.match(patt); 
} 

matches(compareTitle, getWords(checkTitle)); // should return ['5','monkeys'] 

您可以檢查是否通過這樣做存在匹配:

if (matches(compareTitle, getWords(checkTitle))){ 
    // matches found 
} 

如果這個答案是比第一更好,接受這一而是一個。尋求更多的幫助,或者它不起作用。