Я пытаюсь найти определенную строку, например 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 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"}]
измените searchText на '9\\.7'
.
— это специальный символ, означающий любой символ. Поэтому, когда ваша строка поиска содержит его, вам нужно экранировать его, иначе он будет рассматриваться как подстановочный знак.
использовать
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);
можете ли вы предоставить пример ввода, ожидаемый результат и т. д.