PDA

Просмотр полной версии : Поиск элемента в массиве без учёта знаков препинания


vladimir86
23.02.2014, 23:46
Функция search ищет в переменной voprosstr 2 слова: тебя и зовут.
onFrame (1) {
var name: String="Дед Пихто";
var other: String="другой ответ"
var voprosstr: String= "как тебя зовут?"
var voprosarr: Array= voprosstr.split(" ");
var a : Number = 0;

search("тебя", voprosarr);
search("зовут?", voprosarr);
search("зовут", voprosarr);
search("тебя?", voprosarr);

if (a>=2) {
trace (name);
}

else {
trace (other);
}


function search (string: String, arr: Array): void

{
for (var i: Number = 0; i<arr.length; i++)
{
if (arr[i]==string)
{
a++
}
}}}
Но знаков препинания существует много и на каждый вызывать отдельно функцию... сами понимаете. Можно ли как-то сообщить флешу, что "тебя", "тебя?", "тебя!" и т.п. - это то же самое? С ног сбился в поисковике с этим вопросом. Из того, что нашёл, подходить могут регулярные выражения и search(pattern:*):int.
Но они ведь только в as3 действуют, а я работаю в программе, которая только as2 поддерживает. Можно ли решить эту проблему в его рамках?

olexandr
24.02.2014, 01:51
Array::indexOf()
p.s. код ужасен

Hauts
24.02.2014, 09:42
vladimir86, да, код бы причесать.

Самое простое — использовать String.split() и Array.join() для того, чтобы убрать пунктуацию. Так же, в качестве бонуса, можно приводить строку и искомое слово к одному регистру.

На скорую руку примерно так:

function smartStringSearch(searchIn:String, searchWhat:String, ignoreSymbols:Array):Boolean{
searchIn = searchIn.toLowerCase();
searchWhat = searchWhat.toLowerCase();

for(var k=0; k < ignoreSymbols; k++){
searchIn = searchIn.split(ignoreSymbols[k].toLowerCase()).join("");
}

searchIn = searchIn.split(" ");

for(var k=0; k < searchIn.length; k++){
if( searchIn[k] == searchWhat){
return true;
}
}
return false;
}


Могу опечататься, ибо пишу в браузере.

Использовать так:


trace( smartStringSearch("Ого! Вот это МоРоз!", "мороз", [",", "!"]) ); // true, если я не затупил с кодом :)

caseyryan
24.02.2014, 10:57
кто-то даже заморачивался с RegExp под as2 http://www.jurjans.lv/flash/RegExp.html

olexandr
24.02.2014, 12:00
var name:String = "Дед Пихто";
var other:String = "другой ответ";
var voprosstr:String = "как тебя зовут?";

var a:Number = 0;
if (voprosstr.indexOf("тебя") > -1)
a++;
if (voprosstr.indexOf("зовут") > -1)
a++;

if (a>=2) {
trace(name);
} else {
trace(other);
}