09.03.2013, 18:10
|
Кандидат Javascript-наук
|
|
Регистрация: 23.02.2013
Сообщений: 127
|
|
Регулярные выражения
Пытался сам решить задачу и понял, что прежде я состарюсь чем пойму как оно работает используя метод тыка. Помогите с решением, пожалуйста.
Есть абзац с текстом, например такой:
[ "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(15)|agility(5)|intellect(4)|charisma(14)| level(1), wp_one_handed(50)|wp_two_handed(50)|wp_polearm(50) |wp_archery(200)|wp_crossbow(20)|wp_throwing(2), knows_trade_12|knows_prisoner_management_1|knows_i nventory_management_2|knows_shield_10|knows_weapon _master_1|knows_power_throw_10|knows_ironflesh_1,
0x0000000000000001124000000020000000000000001c0080 0000000000000000, 0x00000000000062c76ddcdf7feefbffff00000000001efdbc 0000000000000000, 0,
52 ]
Это кусок текста, перед которым и после еще много текста. Из этого абзаца необходимо в переменные присвоить значения.
var units = "sarleon_recruit"
1) нужно найти в тексте переменную units, затем получить строковые значения что идут до закрывающейся квадратной скобки "]". Т.е это "itm_ankle_boots" "itm_leather_jacket" "itm_linen_tunic" и так далее. Эти значения всегда начинаются с "itm_". Поиск заканчивается при нахождении символа "]" Получиться должно, наверное, что-то вроде: itm_01="itm_ankle_boots" itm_02="itm_leather_jacket" и так далее.
2) нужно найти переменную "units" затем найти слово "strenght" и получить значение что в скобках(15); по аналогии, думаю, я сам смогу додумать и найти другие значения
3) нужно найти переменную "units" затем нужно найти строковые значения переменных что начинаются с "knows_", например "knows_trade_12" "knows_prisoner_management_1" "knows_inventory_management_2". Поиск нужно производить до символов "0x0". В принципе, этот поиск похож на 1 вариант, но я боюсь не найду сам где и что нужно поменять, чтобы искалось то, что нужно.
В идеале, получиться должно что-то вроде
var sarleon_recruit_knows_trade = 12;
var sarleon_recruit_knows_prisoner_management = 1;
Помогите пожалуйста.
|
|
09.03.2013, 20:28
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от фонарик
|
Это кусок текста, перед которым и после еще много текста.
|
А какова уникальность этого текста, в отличии текста до и после?
Наличие Квадратных скобок ?
|
|
09.03.2013, 20:38
|
Кандидат Javascript-наук
|
|
Регистрация: 23.02.2013
Сообщений: 127
|
|
|
|
09.03.2013, 22:55
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от фонарик
|
приложил файлик, откройте его блокнотом, он текстовый
|
В выложенном коде нет переменной units
|
|
10.03.2013, 00:29
|
Кандидат Javascript-наук
|
|
Регистрация: 23.02.2013
Сообщений: 127
|
|
Переменной units в первом посте я присваивал значение "sarleon_recruit", это значение есть в файле что в архиве. Кусок текста что в первом посте как раз из этого файла что в архиве
|
|
10.03.2013, 01:26
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Запутал... лан будем искать, по тому, что в топике
|
|
10.03.2013, 14:34
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
<div id="Text">
sdffffffffffffffff [ "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(15)|agility(5)|intellect(4)|charisma(14)| level(1), wp_one_handed(50)|wp_two_handed(50)|wp_polearm(50) |wp_archery(200)|wp_crossbow(20)|wp_throwing(2), knows_trade_12|knows_prisoner_management_1|knows_i nventory_management_2|knows_shield_10|knows_weapon _master_1|knows_power_throw_10|knows_ironflesh_1,
0x0000000000000001124000000020000000000000001c0080 0000000000000000, 0x00000000000062c76ddcdf7feefbffff00000000001efdbc 0000000000000000, 0,
52 ]sdfffffdsffffffffffff
</div>
<script>
var str = document.getElementById('Text').innerHTML; //Это строка - аналог получения нужной строки
var arr2=str.split(/[\s\S]*?((?:"sarleon_recruit")[\s\S]*?\])/img)[1].split(/\[|\]/img)[1].split(",");arr2.pop();
alert(arr2); //Массив в квадратных скобках за "sarleon_recruit";
var arr3=str.split(/[\s\S]*?((?:"sarleon_recruit")[\s\S]*?(?=0x000))/img)[1].split(/(strength)/img);arr3.splice(0,1);
arr3 = arr3.join('').split(/knows_/)[0].split(/[,|]/img);arr3.pop();
alert(arr3); //Массив от strength до "knows_";
var arr4=str.split(/[\s\S]*?((?:"sarleon_recruit")[\s\S]*?(?=0x000))/img)[1].split(/(knows_.*?)[|,]/img);arr4.splice(0,1);
arr4=arr4.join(',').split(/,+/img);arr4.pop();
alert(arr4) //Массив с "knows_";
</script>
Последний раз редактировалось Deff, 10.03.2013 в 14:55.
|
|
10.03.2013, 16:21
|
Кандидат Javascript-наук
|
|
Регистрация: 23.02.2013
Сообщений: 127
|
|
Вот это да Мистер Deff, не знаю я что вы принимаете для решения таких задач, но ведь все правильно, все работает С такими способностями, вы наверно миллионер уже давно Спасибо вам огромное, благодарности нет границ
Вычленить из массивов нужные значения я сумею, остается лишь из этого значения, например, strenght(15) или agility(5) , достать значения из скобок. Полагаю, начинается оно так:
var AttStr = "strenght(15)" // или arr3[0] из примера
var arr=AttStr.split(а тут заклинание);
alert(arr);
Подскажите, пожалуйста, заклинание
Правда, понадобится еще и из массива с "knows_" достать последие цифровые значения. Мне кажется, этот вариант не похож будет на предыдущий.
var AttStr2 = "knows_trade_12" // или arr4[0] из примера
var arr2=AttStr2.split(а тут заклинание);
alert(arr);
Пожалуйста, помогите наколдовать нужное, очень надеюсь что у вас манна еще не закончилась ))
|
|
10.03.2013, 17:34
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
function retNumb(a){
var Numb = +a.replace(/[^\d]*(\d+)[^\d]*$/,'$1');
return Numb;
}
var AttStr = "strenght(15)"
var AttStr2 = "knows_trade_12" //
alert(retNumb(AttStr));
alert(retNumb(AttStr2));
Последний раз редактировалось Deff, 10.03.2013 в 17:45.
|
|
10.03.2013, 17:43
|
Кандидат Javascript-наук
|
|
Регистрация: 23.02.2013
Сообщений: 127
|
|
Век жизни вам и здоровья, госодин Deff Большое спасибо
|
|
|
|