JSFiddle - React, Tailwind, and code Playground

by ukyo

JavaScript

var words = [
  'abcdef',
  'aaa_______',
  '______bbb',
  'ccc',
  '___ddd___',
  'aa_____dd',
  'JavaScript',
  'javascript',
  'ジャバスクリプト',
  'ジャヴァスクリプト',
  'ジャバスプリクト',
  ' js',
  '   JS   '
];

var tree = {
  type: 'or',
  children: [
    {
      type: 'and',
      children: [
        {
          type: 'rule',
          op: 'startsWith',
          text: 'ab'
        },
        {
          type: 'rule',
          op: 'endsWith',
          text: 'ef'
        },
        {
          type: 'rule',
          op: 'strictEqual',
          text: 'abcdef'
        },
        {
          type: 'rule',
          op: 'includes',
          text: 'bcde'
        },
        {
          type: 'rule',
          op: 'regexp',
          text: '^a.+f$'
        },
      ]
    },
    {
      type: 'and',
      children: [
        {
          type: 'rule',
          op: 'notStartsWith',
          text: 'aaa'
        },
        {
          type: 'rule',
          op: 'notEndsWith',
          text: 'bbb'
        },
        {
          type: 'rule',
          op: 'notStrictEqual',
          text: 'ccc'
        },
        {
          type: 'rule',
          op: 'notIncludes',
          text: 'ddd'
        },
        {
          type: 'rule',
          op: 'notRegexp',
          text: '^aa.+dd$'
        },
      ]
    },
    {
      type: 'or',
      children: [
        {
          type: 'rule',
          op: 'regexp',
          text: '^\s*[Jj]ava[Ss]cript\s*$'
        },
        {
          type: 'rule',
          op: 'regexp',
          text: '^\s*ジャ(ヴァ|バ)スクリプト\s*$'
        },
        {
          type: 'rule',
          op: 'regexp',
          text: '^\s*JS|js\s*$'
        },
      ]
    }
  ]
}

var filter1 = (tree, s) => {
  var i, n;
  switch (tree.type) {
    case 'and':
      for (var i = 0, n = tree.children.length; i < n; i++) {
        if (!filter1(tree.children[i], s)) return false;
      }
      return true;
    case 'or':
      for (var i = 0, n = tree.children.length; i < n;...