2017-07-25 8 views
0

Ich möchte True mit JavaScript regex.test() Methode zurückgeben, wenn die Zeichenfolge nur Wörter aus der Liste hello,hi,what,why,where und keine anderen Wörter enthält.Wie regulärer Ausdruck nur einigen Wörtern entspricht?

Ich versuchte die folgende Regex, aber es konnte nicht nur diese Wörter zu isolieren, und würde zurückkehren, wenn andere Wörter auch vorhanden waren.

/(hello)|(hi)|(what)|(why)|(where)/gi.test(string) 

Beispiele

String Hallo Welt falsch sein sollte, weil der Welt

String hallo hallo, was

String hallo hallo, was Wort wahr sein sollte sollte falsch sein, weil der Welt

String hallo wo sollte

String wahr sein, wo falsch sein sollte, weil der ist

String wo warum wahr sein sollte

string wo ist warum sollte falsch sein, weil ist

String hallo sollte

String hallo bro sollte falsch sein, weil bro

Mittel String sollte nur enthält nur die Worte wahr sein hello,hi,what,why,where

+0

Geben Sie bitte ein Beispiel für gültige und ungültige Eingaben für Ihre Regex ein. Als ich es gelesen habe, habe ich missverstanden, was Sie gefragt haben –

+1

Beispiele hinzugefügt. Bitte überprüfen Sie –

Antwort

1

function test1 (str) { 
 
    return /^(\s*(hello|hi|what|why|where)(\s+|$))+$/i.test(str); 
 
} 
 

 

 
console.log(test1("Hello where what")); // true 
 
console.log(test1("Hello there"));  // false

^ $ Vom Anfang bis zum Ende der Zeichenfolge sollte
^( )+$ nur eine oder mehr von
^( (hello|hi) )+$ diese Worte, wo ein Wort kann
^(\s*(hello|hi) )+$ schließlich durch Null oder mehrere Leerzeichen vorangestellt werden,
^(\s*(hello|hi)(\s+ ))+$ und wird durch ein oder mehrere Leerzeichen
^(\s*(hello|hi)(\s+|$))+$ oder Ende der Zeichenkette angehängt.

+1

Danke es funktioniert ... –

0

Sie müssen die Regex-Gruppe duplizieren, die mit den gültigen Wörtern beca übereinstimmt Verwenden Sie dort mindestens einen, aber möglicherweise mehr, durch Leerzeichen getrennt.

Sie müssen auch die ^ und $ Anker verwenden, um die gesamte Zeichenfolge zu entsprechen.

Arbeitscode:

const examples = ['hello world', 'hello hi what', 'hello hi what word', 'hello where', 'where is', 'where why', 'where why is', 'hello', 'hello bro']; 
 

 
const regex = /^(?:hello|hi|what|why|where)(?:\s(?:hello|hi|what|why|where))*$/; 
 

 
examples.forEach(str => console.log(`string "${str}" should be ${regex.test(str)}`));

Verwandte Themen