如何正则表达式只匹配一些单词?

时间:2017-07-25 21:56:04

标签: javascript regex

如果字符串仅包含列表regex.test()中的单词而不包含任何其他单词,我想使用javascript hello,hi,what,why,where方法返回true。

我尝试了以下正则表达式,但它未能仅隔离这些单词,并且如果还有任何其他单词也会返回。

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

实施例

由于世界

字符串 hello world 应为false

string 你好,什么应该是真的

字符串你好,因为世界

应该是假的

string 你好应该是真的

字符串其中应该为false,因为

字符串为什么应该为真

由于

字符串 的原因应为false

string 你好应该是真的

由于兄弟

字符串 hello bro 应为false

表示字符串应仅包含单词hello,hi,what,why,where

2 个答案:

答案 0 :(得分: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

^ $从字符串的开头到结尾都应该有 ^( )+$只有一个或多个 ^( (hello|hi) )+$这句话,一句话可以 ^(\s*(hello|hi) )+$最终以零或多个空格为前缀,
^(\s*(hello|hi)(\s+ ))+$并以一个或多个空格为后缀 ^(\s*(hello|hi)(\s+|$))+$或字符串结尾。

答案 1 :(得分:0)

您需要复制与有效单词匹配的正则表达式组,因为必须至少有一个,但可能更多,用空格分隔。

您还需要使用^$锚点来匹配整个字符串。

工作代码:

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