2016-12-09 5 views
3

Wie testen, ob die Zeichenfolge eines der ausgewählten Schlüsselwörter enthält?JavaScript/jQuery - Prüfen, ob die Zeichenfolge eines der Schlüsselwörter enthält

Zum Beispiel

var keywords = 'small, big, large' 
var string = 'big brown bear'; 

function wordInString(string, keywords){ 
    return new RegExp('\\b' + keywords + '\\b', 'i').test(string); 
} 

Die oben funktioniert nur für ein einziges Wort, ich brauche mehrere Worte testen zu können, und genaue Übereinstimmung.

+0

wenn sagen Sie mehrere Wörter, dann Reihenfolge der Wörter nicht ryt eine Rolle? –

+0

Das stimmt, die Reihenfolge ist nicht wichtig. – Alko

+0

Auch wenn alle nur dann vorhanden sind, müssen Sie zurückgeben oder auch wenn einzelnes Wort gefunden wird, müssen Sie dann zurückgeben? –

Antwort

4

Split die Zeichenfolge in Worte zu fassen, und verwenden Sie eine Reihe von Schlüsselwörtern

function wordInString(string, keywords) { 
 
    return string.split(/\b/).some(Array.prototype.includes.bind(keywords)); 
 
} 
 

 
var keywords = ['small', 'big', 'large']; 
 
var result1 = wordInString('big brown bear', keywords); // true 
 
var result2 = wordInString('great brown bear', keywords); // false 
 
var result3 = wordInString('Big brown bear', keywords); // false 
 

 
console.log(result1, result2, result3);

ES5 (Cross-Browser) Version

function wordInString(string, keywords) { 
    return string.split(/\b/).filter(function(w) { 
     return keywords.indexOf(w) !== -1; 
    }).length > 0; 
} 

zurückzukehren alle Wörter

function wordInString(string, keywords) { 
 
    return keywords.filter(function(x) { return this.includes(x) }, string.split(/\b/)); 
 
} 
 

 
var keywords = ['small', 'big', 'large']; 
 
var result1 = wordInString('big brown bear large', keywords); // ["big", "large"] 
 
var result2 = wordInString('great brown bear', keywords);  // [] 
 
var result3 = wordInString('Big brown bear', keywords);  // [] 
 

 
console.log(result1); 
 
console.log(result2); 
 
console.log(result3);

Um das erste passende Wort oder einen leeren String zurück

function wordInString(string, keywords) { 
 
\t var r = ""; 
 
    string.split(/\b/).some(x => { 
 
    \t return r = keywords.includes(x) ? x : ""; 
 
    }) 
 
    return r; 
 
} 
 

 
var keywords = ['small', 'big', 'large']; 
 
var result1 = wordInString('big brown bear large', keywords); // "big" 
 
var result2 = wordInString('great brown bear', keywords);  // "" 
 
var result3 = wordInString('Big brown bear', keywords);  // "" 
 

 
console.log(result1); 
 
console.log(result2); 
 
console.log(result3);

+0

Ich erhalte einen Fehler in Firebug 'TypeError: Array.prototype.includes is undefined ' – Alko

+0

@Alko - Ihr Browser ist nicht auf dem neuesten Stand, Firefox unterstützt 'includes' ab Version 43 und hat zusätzlich eine ES5-Version hinzugefügt. – adeneo

+0

Ok, zweite ES5-Version funktioniert gut, nur ein weiteres Problem, es gibt wahr/falsch zurück, ich muss das tatsächliche Schlüsselwort zurückgeben, wenn es wahr ist, oder eine leere Zeichenfolge, falls falsch. – Alko

1

ein Array von Schlüsselwort, und eine Schleife durch sie:

var keywords = ['small', 'big', 'large']; 
 

 
console.log(wordInString("big brown bear", keywords));   // true 
 
console.log(wordInString("it's small!", keywords));    // true 
 
console.log(wordInString("it's larger than the other", keywords));// false 
 
console.log(wordInString("it's black and red", keywords));  // false 
 

 
function wordInString(string, keywords){ 
 
    for(var i=0; i<keywords.length; i++){ 
 
    if(new RegExp('\\b' + keywords[i] + '\\b', 'i').test(string)){ 
 
     return true; 
 
    } 
 
    } 
 
    return false; 
 
}

0

ist hier eine andere Lösung mit map, reduce Funktionen und logical operators.

var keywords = 'small, big, large' 
 
var test1 = testString('big brown bear', keywords); //big 
 
var test2 = testString('great brown bear', keywords); // empty 
 
var test3 = testString('Big brown bear', keywords); // empty 
 
function wordInString(string, keywords){ 
 
    return new RegExp('\\b' + keywords + '\\b').test(string); 
 
} 
 

 
function testString(string,keywords){ 
 
    var word='empty'; 
 
    var result=keywords.split(',').map(function(item){ 
 
     if(wordInString(string,item.trim())==true) 
 
      word=item.trim(); 
 
     return wordInString(string,item.trim()); 
 
    }).reduce(function(curr,prev){ 
 
     return curr || prev; 
 
    }); 
 
    return word; 
 
} 
 
console.log(test1) 
 
console.log(test2) 
 
console.log(test3)

+0

@Alko, bitte sehen Sie sich meine Antwort an. –

0

Split die Schlüsselwörter und dann indexOf von Schlüsselwörtern auf der Saite suchen. wenn nicht gefunden

var keywords = 'small, big, large' 
 
var string = 'big brown bear'; 
 

 
function wordInString(string, keywords) { 
 
    return keywords.split(',').some(function(keyword) { 
 
    return string.indexOf(keyword.trim()) == -1 ? false : true 
 
    }); 
 
    //return new RegExp('\\b' + keywords + '\\b', 'i').test(string); 
 
} 
 

 
console.log(wordInString(string, keywords)) 
 
console.log(wordInString(string, "xyz, abc")) 
 
console.log(wordInString("'a large bear'", "large, none"))

1

Returns Wort oder voreingestellte Zeichenfolge abgestimmt.

function wordInString(string, keywords) { 
 
    return string.split(/\b/).filter(word => keywords.some(w => w === word))[0] || 'empty'; 
 
} 
 

 
var keywords = ['small', 'big', 'large']; 
 
var result1 = wordInString('big brown bear', keywords); // big 
 
var result2 = wordInString('tiny bear', keywords); // empty 
 
var result3 = wordInString('huge hairy bear', keywords); // empty 
 

 
console.log(result1, result2, result3);

Verwandte Themen