正则表达式可匹配完整单词,但首次失败时完全不匹配

时间:2018-09-18 12:41:20

标签: javascript regex

我正在寻找一个JS正则表达式来匹配完整的单词,但是如果有任何不同的单词(任何失败),则根本不匹配。

例如:匹配cat dog cat


dog->一切都匹配。好吧。

dog-> cat被匹配,即使此处dog cata不存在。好吧。

dog-> cata被匹配, $order = Input::get('order'); $menu = Input::get('menu_id'); $var = DB::table('submenu') ->select('order','menu_id') ->where('order',$order) ->where('menu_id',$menu) ->first(); if(!empty($var)){ //Do Something for Duplicate Entry } else { //Do Something for Unique Entry; } 不匹配。我根本不想要任何比赛。

2 个答案:

答案 0 :(得分:0)

^(?:(?=.*\bdog\b)(?=.*\bcat\b).*|cat|dog)$是您想要的吗?

说明:

^                       : beginning of the string
  (?:                   : start non capture group
      (?=.*\bdog\b)     : positive lookahead, zero-length assertion, make sure we have dog somewhere in the string
      (?=.*\bcat\b)     : positive lookahead, zero-length assertion, make sure we have cat somewhere in the string
      .*                : 0 or more any character
    |                   : OR
      cat               : cat alone
    |                   : OR
      dog               : dog alone
  )                     : end group
$                       : end of string

var test = [
    'dog cat',
    'cat dog',
    'dog',
    'cat',
    'dog cata',
    'cat fish',
];
console.log(test.map(function (a) {
  return a + ' ==> ' + a.match(/^(?:(?=.*\bdog\b)(?=.*\bcat\b).*|cat|dog)$/);
}));

答案 1 :(得分:0)

因此,基本上,您想检查字符串中的所有单词是否与regex匹配,或者所有字符串都应来自字符串列表,不是吗?让我们拆分所有单词,然后检查所有单词是否都属于您的字符串列表。

var reg = /dog|cat|rat/,
    input1 =  "dog   cat      rat",
    input2 = "dog cata   rat",
    input3 = "abcd efgh",
    isMatched = s => !(s.match(/\S+/g) || []).some(e => !(new RegExp(e).test(reg)));
    
console.log(isMatched(input1));
console.log(isMatched(input2));
console.log(isMatched(input3));