Вариант частичного совпадения ...
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")); |
Цитата:
Полное вхождение Частичное вхождение Полное совпадение Частичное совпадение - 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 элемент поискового подмножества :) |
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, "острота" ) ); |
rgl,
http://www.snippy.ru/snippet/1634-an...na-javascript/ и естественно победитель с минимальным расстоянием , алгоритм используется активно и очень плотно |
Цитата:
|
рони,
да , запарился . в любом случае вариант на расстояниях решение гораздо правильнее |
рони,
Все классно и круто, только не понятно зачем сначала искать более длинную часть, если все равно все определяется тем, найдется ли более короткая. Т.е. можно сразу искать только первую букву. Да и регэкспы без необходимости использовать зачем? |
Цитата:
|
рони,
поправил тест . Сможете обосновать почему соус более релевантен чем яблоко?) яблоко ведь стоит в начале слова , и вполне логично , что более подходящий вариант связан с яблоком для стран с письменностью слева направо :) |
Цитата:
|
Часовой пояс GMT +3, время: 14:36. |