Регулярные выражения
Пытался сам решить задачу и понял, что прежде я состарюсь чем пойму как оно работает используя метод тыка. Помогите с решением, пожалуйста.
Есть абзац с текстом, например такой: [ "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; Помогите пожалуйста. |
Цитата:
Наличие Квадратных скобок ? |
Вложений: 1
Цитата:
|
Цитата:
|
Переменной units в первом посте я присваивал значение "sarleon_recruit", это значение есть в файле что в архиве. Кусок текста что в первом посте как раз из этого файла что в архиве :-?
|
Запутал... лан будем искать, по тому, что в топике
|
<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> |
Вот это да :blink: Мистер Deff, не знаю я что вы принимаете для решения таких задач, но ведь все правильно, все работает :-? С такими способностями, вы наверно миллионер уже давно :D Спасибо вам огромное, благодарности нет границ :)
Вычленить из массивов нужные значения я сумею, остается лишь из этого значения, например, 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);Пожалуйста, помогите наколдовать нужное, очень надеюсь что у вас манна еще не закончилась )) |
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 :) Большое спасибо
![]() |
Часовой пояс GMT +3, время: 06:08. |