2016-12-09 10 views
3

文字列に選択したキーワードが含まれているかどうかをテストするにはどうすればよいですか?例えばJavaScript/jQuery - 文字列にキーワードの1つが含まれているかどうかをチェック

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

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

上記は、単一のワードで動作し、私は複数の単語、及び正確な一致をテストできるようにする必要があります。

+0

あなたが複数の単語を言うとき、それからの単語の順番はRYT問題ではありませんか? –

+0

それは正しいですが、順序は重要ではありません。 – Alko

+0

また、すべてが存在する場合は、返却する必要があります。また、単一の単語が見つかった場合でも、返却する必要はありますか? –

答えて

4

分割単語に文字列、およびすべて戻すに

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(クロスブラウザ)バージョン

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

キーワードの配列を使用言葉

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

最初に一致する単語または空の文字列

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

ファイアバグ 'TypeError:Array.prototypeでエラーが発生しました。includesは未定義です ' – Alko

+0

@Alko - あなたのブラウザは最新ではありません。Firefoxはバージョン43以降の 'includes'をサポートし、ES5バージョンも加えました。 – adeneo

+0

OK、2番目のES5バージョンは正常に動作します。もう1つの問題があります。真/偽を返します。真の場合は実際のキーワードを返し、偽の場合は空の文字列を返す必要があります。 – Alko

1

それらを介して、キーワードの配列、およびループを使用して戻すには:

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

map
0

reduce機能と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、私の答えを見てください。 –

0

キーワードを分割して、文字列にキーワードのindexOfを検索します。

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

見つからない場合は戻り値は、単語やプリセットの文字列に一致しました。

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

関連する問題