Проверка присутствия значений из списка



  • Сложилась следующая ситуация - есть задание в виде текста на странице - получаю его через взять текст, и есть список ключевых слов, например 5 - наличие которых в тексте необходимо проверить...
    Сейчас это реализовано последовательной цепочкой через логику:
    if[[var]].indexOf("key") >=0
    if[[var]].indexOf("key1") >=0
    if[[var]].indexOf("key2") >=0
    и т.д.

    скрипт очень большой, вернее сказать высокий) - можно ли каким то образом сформировать выражение, чтобы список кеев был помещен в одно выражение, что-то типа
    if[[var]].indexOf("key;key1;key2") >=0 то есть, если любое из перечисленных значений присутствует в тексте выражение считается верным

    @support - как правильно реализовать???



  • @Turutur said in Проверка присутствия значений из списка:

    if[[var]].indexOf("key;key1;key2") >=0

    Сейчас что-то похожее пытаюсь сообразить, а вместо "key;key1;key2" список из файла через ресурс как-то можно загрузить?

    Примерно так

    if[[var]].indexOf("{{list-key}}") >=0

    Надо сформировать файл минус слов или черный список, с возможностью его дополнять.



  • @Turutur

    if([[var]].indexOf("key") >=0 && [[var]].indexOf("key1") >=0 && [[var]].indexOf("key2") >=0) 
    


  • @servasw45
    Если есть строка с переменным числом элементов, то нужно сначала разбить ее на список, потом проверить каждый элемент

    indexoflist.xml



  • Спасибо за подсказку, support!

    У вас наверное очепятка вкралась

    alt text

    Вместо Парсить Строку нужно Ресурс В Список

    alt text

    так заработало.



  • @support said in Проверка присутствия значений из списка:

    @Turutur

    if([[var]].indexOf("key") >=0 && [[var]].indexOf("key1") >=0 && [[var]].indexOf("key2") >=0) 
    

    не срабатывает в блоке if прописываю строчку
    [[SAVED_TZ]].indexOf("Нужно") >=0 && [[SAVED_TZ]].indexOf("лендинг") >=0 && [[SAVED_TZ]].indexOf("LP") >=0
    в коде она выглядит так:
    _if(VAR_SAVED_TZ.indexOf("Нужно") >=0 && VAR_SAVED_TZ.indexOf("лендинг") >=0 && VAR_SAVED_TZ.indexOf("LP") >=0,function(){
    section_insert()

    что не так?



  • @Turutur если не срабатывает, значит в VAR_SAVED_TZ нет одновременно слов "Нужно" И "лендинг" И "LP"
    И именно в таком регистре букв.
    Так что исходный текст в студию, а потом будет видно, почему что не срабатывает, как ожидают.



  • @out - спасибо за участие! То есть получается идет проверка на наличие именно всего текста - я думал && - означает "или" - как тогда реализовать проверку на наличие любого из слов, а не всех сразу? И второе - как задать проверку на наличие не целого слова, а например его части, и как исключить значение регистра??? Например есть ключ Одностраничник - в тексте он может быть как Одностраничник, одностраничник, одностраничника и так далее как сделать проверку по части слова "дностраничник" - возможно ли?



  • @Turutur

    1. && замени на ||
      && логическое И
      || - ИЛИ
    1. Проверяется и так не целое слово, а "его части". Если бы нужна была проверка именно целых слов, то поиск бы велся иначе: использовались бы регулярки \bслово\b или что-то подобное (\b значит граница слова)...
      На регистронезависимого поиска, то нужно исходных текст (в котором ты ищешь) привести в нижный регистр и искомые слова писать в нижнем регистре.

    Как привести содержимое переменной к нижнему регистру ? так: https://learn.javascript.ru/string#смена-регистра



  • @Turutur и вообще советую тебе юзать более удобный вариант:
    это вставлять в "выполнить код"

    var myyytxt = [[ТВОЯпеременнаястекстом]].toLowerCase();
    
    var searchTerms = [
      'lp',
      'такое вот',
      'ищу'
    ];
    
    VAR_FOUND_STATUS = false;
    for (var i = 0; i < searchTerms.length; i++) {
      if (myyytxt.indexOf(searchTerms[i]) > - 1) {
        VAR_FOUND_STATUS = true;
        break;
      }
    }
    
    

    [[ТВОЯ переменная с текстом]] это замени своей переменной, где лежит текст

    после этого в обычный IF просто впиши [[FOUND_STATUS]]
    если одно из слов было найдено, то условие ИФ будет выполнятся.


Log in to reply