如果字符串仅包含列表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
答案 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)}`));