Метод проверки регулярных выражений, возвращающий более определенной строки

Я пытаюсь найти определенную строку, например 9,7, в массиве, используя метод проверки регулярных выражений, но он возвращает значения, содержащие 1984, 1987 в той же строке, а также 9,7 строк.

searchText= '9.7';
items = [ {description: "MERCEDES BENZ L 1519 - OM 355/5 9.7 L 10V SOHV L5 1973 1987"}, {description: "MERCEDES BENZ LB 2219 - OM 355/5 9.7 L 10V SOHV L5 1973 1980"}, {description: "MERCEDES BENZ LS 1932 - OM 355/6 LA 11.6 L 12V SOHV L6 1984 1987"}, {description: "MERCEDES BENZ O 370 RSD OM 355/5 11.6 L 10V SOHV L5 1985 1987"} ] 

let returnArray = [],
      splitText = searchText.toLowerCase().split(/\s+/),
      regexp_and = '(?=.*' + splitText.join(')(?=.*') + ')',
      re = new RegExp(regexp_and, 'i');

    for (let x = 0; x < items.length; x++) {
      if (re.test(items[x][field])) {
        returnArray.push(items[x]);
      }
    }
    return returnArray;

Ожидаемый результат:

array = [ {description: "MERCEDES BENZ L 1519 - OM 355/5 9.7 L 10V SOHV L5 1973 1987"}, {description: "MERCEDES BENZ LB 2219 - OM 355/5 9.7 L 10V SOHV L5 1973 1980"}]

Кто-нибудь может мне помочь? Спасибо.

можете ли вы предоставить пример ввода, ожидаемый результат и т. д.

depperm 18.03.2022 14:06

Конечно, @depperm searchText: '9.7'; Array: items = [ {description: "MERCEDES BENZ L 1519 - OM 355/5 9,7 л 10 В SOHV L5 1973 1987"}, {description: "MERCEDES BENZ LB 2219 - OM 355/5 9,7 л 10 В SOHV L5 1973 1980"} , {description: "MERCEDES BENZ LS 1932 - OM 355/6 LA 11,6 л 12 В SOHV L6 1984 1987"}, {description: "MERCEDES BENZ O 370 RSD OM 355/5 11,6 л 10 В SOHV L5 1985 1987"} ] Ожидаемый результат : array = [ {description: "MERCEDES BENZ L 1519 - OM 355/5 9,7 л 10 В SOHV L5 1973 1987"}, {description: "MERCEDES BENZ LB 2219 - OM 355/5 9,7 л 10 В SOHV L5 1973 1980"}]

Robson Saito 18.03.2022 14:16

измените searchText на '9\\.7'

depperm 18.03.2022 14:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

. — это специальный символ, означающий любой символ. Поэтому, когда ваша строка поиска содержит его, вам нужно экранировать его, иначе он будет рассматриваться как подстановочный знак.

использовать

const splitText = searchText
   .toLowerCase()
   .split(/\s+/)
   .map(token=>token.replace(/\./g,'\\.'));

но имейте в виду, что это может произойти с другими специальными символами

const searchText = '9.7';
const items = [{
  description: "MERCEDES BENZ L 1519 - OM 355/5 9.7 L 10V SOHV L5 1973 1987"
}, {
  description: "MERCEDES BENZ LB 2219 - OM 355/5 9.7 L 10V SOHV L5 1973 1980"
}, {
  description: "MERCEDES BENZ LS 1932 - OM 355/6 LA 11.6 L 12V SOHV L6 1984 1987"
}, {
  description: "MERCEDES BENZ O 370 RSD OM 355/5 11.6 L 10V SOHV L5 1985 1987"
}];

const returnArray = [];
const splitText = searchText
  .toLowerCase()
  .split(/\s+/)
  .map(token => token.replace(/\./g, '\\.'));
const regexp_and = '(?=.*' + splitText.join(')(?=.*') + ')';
const re = new RegExp(regexp_and, 'i');
const field = 'description';

for (let x = 0; x < items.length; x++) {
  if (re.test(items[x][field])) {
    returnArray.push(items[x]);
  }
}

console.info(returnArray);

Другие вопросы по теме