21.03.2013, 13:44
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Вариант частичного совпадения ...
var massiv = ["яблочный пирог", "соус_острый", "яблоки_красные"];
function findPartial(a, s) {
while (s) {
var reg = new RegExp(s)
for (var i = 0; i < a.length; i++)
if (reg.test(a[i])) return i;
s = s.slice(0, -1)
}
return -1;
}
alert(findPartial(massiv, "яблокo"));
|
|
21.03.2013, 13:45
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
Сообщение от rgl
|
dmitriymar,
Из вопроса, а также из приведенного примера можно предположить, что под частичным совпадением понимается вхождение:
Сообщение от фонарик Посмотреть сообщение
Подскажите пожалуйста, как проверить есть ли элемент в массиве, используя в поиске часть его имени?.....
|
Здесь больше к терминологии:
Полное вхождение
Частичное вхождение
Полное совпадение
Частичное совпадение - http://ru.wikipedia.org/wiki/%D0%A0%...B9%D0%BD%D0%B0 чем меньше расстояние тем выше частичное совпадение совпадение .
В вашем же случае , находится полное вхождение
var massiv = ["яблочный пирог", "соус_острый", "яблоки_красные"];
function findPartial(a, s) {
while (s) {
var reg = new RegExp(s)
for (var i = 0; i < a.length; i++)
if (reg.test(a[i])) return i;
s = s.slice(1, -1)
}
return -1;
}
alert(findPartial(massiv, "яблосоус"))
тоже такой момент, и почемуто мне кажется что искомое вхождение всё таки больше похоже на 1 или 3 элемент поискового подмножества
Последний раз редактировалось dmitriymar, 21.03.2013 в 14:03.
|
|
21.03.2013, 13:51
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
var massiv = ["яблочный пирог", "соус_острый", "яблоки_красные"];
function findPartial( a, s )
{
var i;
if( s.length > 3 ) {
i = s.length - 3;
var r = s.substr( i, 3 );
while( --i >= 0 )
r += "|" + s.substr( i, 3 );
r = new RegExp( r );
for( i = 0; i < a.length; ++i )
if( r.test( a[i] ) )
return i;
} else {
for( i = 0; i < a.length; ++i )
if( a[i].indexOf( s ) >= 0 )
return i;
}
return -1;
}
alert( findPartial( massiv, "острота" ) );
|
|
21.03.2013, 13:57
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от dmitriymar
|
3 элемент поискового подмножества
|
где вы увидели 3? 3элемент это как раз 2 индекс
|
|
21.03.2013, 13:59
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
рони,
да , запарился . в любом случае вариант на расстояниях решение гораздо правильнее
|
|
21.03.2013, 14:00
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
рони,
Все классно и круто, только не понятно зачем сначала искать более длинную часть, если все равно все определяется тем, найдется ли более короткая. Т.е. можно сразу искать только первую букву. Да и регэкспы без необходимости использовать зачем?
|
|
21.03.2013, 14:04
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от rgl
|
если все равно все определяется тем, найдется ли более короткая.
|
в каком месте? поиск прекратится на самом большом совпадении
|
|
21.03.2013, 14:05
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
рони,
поправил тест . Сможете обосновать почему соус более релевантен чем яблоко?) яблоко ведь стоит в начале слова , и вполне логично , что более подходящий вариант связан с яблоком для стран с письменностью слева направо
Последний раз редактировалось dmitriymar, 21.03.2013 в 14:07.
|
|
21.03.2013, 14:07
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от rgl
|
Да и регэкспы без необходимости использовать зачем?
|
а как без них?
|
|
|
|