2017-04-11 23 views
1

ユーザーのテキスト入力を、定義済みのキーワードとフレーズのセットと照合しようとしています。regexを使って単一の単語と単語の組み合わせをマッチさせる方法は?

例:

var keywordRegEx = /\b(nutrition|protein|muscle|muscle growth|muscle repair|muscle food|foods)\b/ig; 

var user_input = "What are the best foods for muscle growth and muscle repair"; 
var matches = user_input.match(keywordRegEx); 

console.log(matches); 
//["foods", "muscle", "muscle"] 

しかし、私は、コンソールに表示することです:正規表現を使用して、それらの全体の単語を含む単一の全体の単語と組み合わせ照合する方法は

//["foods", "muscle", "muscle growth", "muscle repair"] 

ありますか?

*私は事前に定義されたキーワードやフレーズのリストから、「筋肉」を削除した場合、私は次のことを得ることに注意してください:

var keywordRegEx = /\b(nutrition|protein|muscle growth|muscle repair|muscle food|foods)\b/ig; 

var user_input = "What are the best foods for muscle growth and muscle repair"; 
var matches = user_input.match(keywordRegEx); 

console.log(matches); 
//["foods", "muscle growth", "muscle repair"] 

しかし、私は自分自身で、単一の単語を一致できるようにする必要があります。..

regexに関してはかなり迷っていますので、ここで助けていただければ幸いです。

ありがとうございます。

+0

だから、ちょうど正規表現で単一の単語を追加しますか? – Cerbrus

答えて

0

を使用すると、2つの正規表現を使用して、単一のアレイにそれらを組み合わせることができ、単一の単語とその組み合わせをキャッチします。このようなソリューションは、単一の正規表現よりも、おそらく速く読みやすくしてある。

var keywordRegEx = /nutrition|protein|foods|muscle/g; 
 
var keywordPairsRegEx = /muscle growth|muscle repair|muscle food/g; 
 

 
var user_input = "What are the best foods for muscle growth and muscle repair"; 
 
var matches = user_input.match(keywordRegEx) //first regex 
 
      .concat(user_input.match(keywordPairsRegEx)) //second regex 
 
      .filter((item, index, inputArray) => { //remove duplicates 
 
       return inputArray.indexOf(item) == index; 
 
      }); 
 

 
console.log(matches);

+0

それだけです!ありがとう@Oskar – GlennPB

2

あなたはとても近かったです。後で単一の単語を追加するだけです。この場合、正規表現の末尾にmuscleを追加してください。

注:入力文字列(muscleを追加)を変更して、正規表現が1つまたは複数の単語を取得するようにしました。

const keywordRegEx = /(nutrition|protein|muscle growth|muscle repair|muscle food|foods|muscle)/g; 
 

 
var user_input = "What are the muscle best foods for muscle growth and muscle repair"; 
 
var matches = user_input.match(keywordRegEx); 
 

 
console.log(matches);

ここでそれを再生する:https://regex101.com/r/Ge5Kry/1

+0

入力文字列を変更したことを忘れた – Oskar

+0

@Oskar true!正規表現が今までにはなかった単一の単語ではなく、単一の単語をつかむことを示しています。その情報で答えを更新します! – caramba

関連する問題