如果条件推送包含/匹配字符串的值

时间:2016-04-28 10:20:31

标签: javascript jquery if-statement fullcalendar string-matching

我有一个运行良好的完整日历脚本。我有一些过滤器,基本上有以下形式:

$("input[name='event_filter_select']:checked").each(function () {
    // I specified data-type attribute in HTML checkboxes to differentiate
    // between risks and tags.
    // Saving each type separately
    if ($(this).data('type') == 'risk') {
        risks.push($(this).val());
    } else if ($(this).data('type') == 'tag') {
        tagss.push($(this).val());
    }
});

else if语句应检查结果集中是否包含选中的值'tag',而不是结果集的唯一值(如==所暗示的那样)。

现在我只能过滤仅具有已检查标记值的结果。但我想过滤掉那些具有标签价值的那些。

我认为这是用match(/'tag'/)完成的,但我无法弄清楚如何把它放到if语句中。

如果有人能带领我朝着正确的方向前进,那真的很高兴。

4 个答案:

答案 0 :(得分:1)

我会这样做:

test(/tag/)

如果'标签'必须位于字符串的开头,则此方法有效 如果“标记”可以在字符串中的任何位置,则可以使用{{1}}。

答案 1 :(得分:0)

尝试这种情况。

   /\btag\b/.test($(this).data('type'))

答案 2 :(得分:0)

如果您的数据是字符串,例如:tag filter1 filter2 filter3,您可以使用indexOf - 函数(manual

代码:

if ($(this).data('type').indexOf("risk") != -1))
   //Action here.
如果找不到文本,

indexOf会返回-1

答案 3 :(得分:0)

您可以使用:

var re = /\btest\b/i 

或者如果您希望将单词硬编码(例如,在示例中,单词 test ):

var input = document.querySelector('input');
var div = document.querySelector('div');
var re;
var match;

input.addEventListener('keyup', function() {
  match = input.value.trim();
  re = new RegExp('\\b' + match + '\\b', 'i');
  
  if($('div').data('type').match(re))
    div.innerHTML = 'Matched the word: ' + '<strong>' + match + '</strong>';
  else div.innerHTML = 'Did not match the word: ' + '<strong>' + match + '</strong>';
    
});

显示以下匹配项的示例:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Word to match:<input></input><br>
Output:
<div data-type='tag tags test'></div>
else if ($(this).data('type').match(/\btag\b/i) { //true for data-type that has `tag` in it.
    tagss.push($(this).val());
}

将上述正则表达式合并到您的代码中,它应该如下所示:

gruntfile.js