Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярные выражения (https://javascript.ru/forum/misc/36266-regulyarnye-vyrazheniya.html)

Deff 13.03.2013 01:14

фонарик,
Наверняка - onclick="alert(arraysFind(this.id))" -корректнее, поскольку пользователь нажав - еще раздумывает, а вот нажав отпустив - ожидает действия

фонарик 13.03.2013 15:08

Вот вы привели пример с alert, и представить себе не можете сколько часов я думал и пытался сделать так, чтобы alert работал непосредственно из функции arraysFind :-? Но все-таки, не смотря на то, что смотреть на ваш скрипт изнутри было страшновато, проблему решил :) Оказалось, что там alert вне тела самой функции, потому и не работало :D Большое вам спасибо за подсказку.

фонарик 13.03.2013 18:46

Никак не могу понять, почему нельзя определить размер массива :( Приписываю к массиву .lenght, но не работает. Подскажите пожалуйста, как в вашем скрипте определить размер массива?
http://learn.javascript.ru/play/0mZIH
(строка 43)

рони 13.03.2013 18:55

фонарик, массив Out , а arr - его элементы
alert(Out.length)

фонарик 13.03.2013 19:06

рони, похоже на то :) Получается тогда что-то вроде:
alert(Out[0].length)
Спасибо за подсказку :)

фонарик 16.03.2013 03:57

Мистер Deff, а нельзя ли облачить каждый элемент во всех трех массивах в кавычки? Дело в том, что полученные массивы текстом вставляются в другой скрипт, и я с удивлением обнаружил что название элемента в массиве должно быть написано обязательно в кавычках :( Такое возможно в вашем скрипте, если обойтись без сильных изменений всего скрипта в целом? :-?

<div id="Text" style="display:none; ">
[ "sarleon_recruit", "Sarleon Recruit", "Sarleon Recruits", tf_guarantee_boots|tf_guarantee_armor, 0, 0, fac_neutral,
    [ itm_ankle_boots, itm_leather_jacket, itm_linen_tunic, itm_leather_vest, itm_cudgel, itm_warhammer, itm_military_pick, itm_sickle, itm_dagger,],
    strength(5)|agility(5)|intellect(4)|charisma(4)|level(1), wp_one_handed(50)|wp_two_handed(50)|wp_polearm(50)|wp_archery(20)|wp_crossbow(20)|wp_throwing(20), knows_trade_2|knows_prisoner_management_1|knows_inventory_management_2|knows_shield_1|knows_weapon_master_1|knows_power_throw_1|knows_ironflesh_1,
    0x0000000000000001124000000020000000000000001c00800000000000000000, 0x00000000000062c76ddcdf7feefbffff00000000001efdbc0000000000000000, 0,
    52  ]
</div>

<div id="sarleon_recruit" onclick="arraysFind(this.id)" style="cursor:pointer;border:1px solid red; width:30px; height:30px; position:absolute; left: 40px; top: 20px; z-index:555; background-color:blue;"></div>    
    
<script>
function  arraysFind (BUM) {
var Out =[];
var str = document.getElementById('Text').innerHTML; //Это строка  - аналог получения нужной строки
var valid = str.indexOf(BUM);
if(valid==-1) return false;
str = str.substring(valid);//alert('>'+str)
var arr1=str.split(/\[|\]/img)[1].split(",");arr1.pop();

Out.push(arr1);//Массив в квадратных скобках за BUM;

var arr2=str.split(/0x000/img)[0].split(/(strength)/img);arr2.splice(0,1);
arr2 = arr2.join('').split(/knows_/)[0].split(/[,|]/img);arr2.pop();

Out.push(arr2); //Массив от strength до "knows_";

var arr3=str.split(/0x000/img)[0].split(/(knows_.*?)[|,]/img);arr3.splice(0,1);
arr3=arr3.join(',').split(/,+/img);arr3.pop();

Out.push(arr3); //Массив с "knows_";
  
alert(arr1)
alert(arr2)
alert(arr3)

	return Out;
}
    </script>

Deff 16.03.2013 05:42

<div id="Text" style="display:none; ">
[ "sarleon_recruit", "Sarleon Recruit", "Sarleon Recruits", tf_guarantee_boots|tf_guarantee_armor, 0, 0, fac_neutral,
    [ itm_ankle_boots, itm_leather_jacket, itm_linen_tunic, itm_leather_vest, itm_cudgel, itm_warhammer, itm_military_pick, itm_sickle, itm_dagger,],
    strength(5)|agility(5)|intellect(4)|charisma(4)|level(1), wp_one_handed(50)|wp_two_handed(50)|wp_polearm(50)|wp_archery(20)|wp_crossbow(20)|wp_throwing(20), knows_trade_2|knows_prisoner_management_1|knows_inventory_management_2|knows_shield_1|knows_weapon_master_1|knows_power_throw_1|knows_ironflesh_1,
    0x0000000000000001124000000020000000000000001c00800000000000000000, 0x00000000000062c76ddcdf7feefbffff00000000001efdbc0000000000000000, 0,
    52  ]
</div>

<div id="sarleon_recruit" onclick="arraysFind(this.id)" style="cursor:pointer;border:1px solid red; width:30px; height:30px; position:absolute; left: 40px; top: 20px; z-index:555; background-color:blue;"></div>    
    
<script>
function  arraysFind (BUM) {
  function  replac (arr) {
   arr=arr.join(',').replace(/^\s*|\s*$/,'').split(/\s*?,\s*/g);
   arr=('"'+arr.join('","')+'"').split(/,/g);
    return arr
  }
var Out =[];
var str = document.getElementById('Text').innerHTML; //Это строка  - аналог получения нужной строки
var valid = str.indexOf(BUM);
if(valid==-1) return false;
str = str.substring(valid);//alert('>'+str)
var arr1=str.split(/\[|\]/img)[1].split(",");arr1.pop();
arr1 = replac(arr1);
Out.push(arr1);//Массив в квадратных скобках за BUM;

var arr2=str.split(/0x000/img)[0].split(/(strength)/img);arr2.splice(0,1);
arr2 = arr2.join('').split(/knows_/)[0].split(/[,|]/img);arr2.pop();
arr2 = replac(arr2);
Out.push(arr2); //Массив от strength до "knows_";

var arr3=str.split(/0x000/img)[0].split(/(knows_.*?)[|,]/img);arr3.splice(0,1);

arr3=arr3.join(',').split(/,+/img);arr3.pop();
arr3 = replac(arr3);

Out.push(arr3); //Массив с "knows_";
  
alert(arr1)
alert(arr2)
alert(arr3)

	return Out;
}
    </script>

фонарик 16.03.2013 14:19

Большое вам спасибо :)

В переменных itm_ перед названием, т.е после кавычки стоит пробел
Код:

" itm_ankle_boots"," itm_leather_jacket"," itm_linen_tunic",
откуда образуется этот пробел я сам наверно так и не разгадаю :-? Не поможете его убрать? :)

Deff 16.03.2013 16:52

Цитата:

Сообщение от фонарик
В переменных itm_ перед названием, т.е после кавычки стоит пробел

Поправил
В исходнике строки
[ itm_ankle_boots, itm_leather_jacket, itm_linen_tunic, itm_leather_vest, itm_cudgel, itm_warh

фонарик 16.03.2013 17:54

Проверил на своих кракозябрах, все правильно обрабатывается, все как нужно. Чтоб я без вас делал :D Спасибо.


Часовой пояс GMT +3, время: 17:44.