Ругулярные выражения.
Есть следующий текстовый документ:
{ "http://habrahabr.ru/": { "id": "http://habrahabr.ru/", "shares": 832 }, "http://habrahabr.ru/company/apps4all/blog/144705/": { "id": "http://habrahabr.ru/company/apps4all/blog/144705/", "shares": 11 } } Нужно при помощи регулярки получить числа: 832 и 11. При этом нужно учесть что второго числа может и небыть, в данном случае 11. Как пробовал я: var txt = '{"http://habrahabr.ru/events/coming/":{"id": "http://habrahabr.ru/events/coming/","shares": 832},"http://habrahabr.ru/":{"id": "http://habrahabr.ru/","shares": 11}}'; var matches = txt.math(/"shares":\s+(\d+)\s+/g); При это я ожидал что в: matches[0] -> будет изначальный документ matches[1] -> первое значение (832) matches[2] -> второе значение (11), если есть Но как оказалось все не так, постоянно возвращается непонятная фигня. Поэтому помогите )) |
var found = txt.match( /"shares":\s*\d+/gm ); // дальше сами ) |
Magneto, видимо, мне следовало сразу добавить - про сохраняющие скобки в матче забудьте (при глобальном поиске).
|
<script type="text/javascript"> var txt = '{"http://habrahabr.ru/events/coming/":{"id": "http://habrahabr.ru/events/coming/","shares": 832},"http://habrahabr.ru/":{"id": "http://habrahabr.ru/","shares": 11}}'; re = /"shares": [0-9]+[^0-9]/gm; found = txt.match(re); for(var i in found){ found[i]=found[i].replace(/^[^0-9]+/g,'') found[i]=parseFloat(found[i]) alert('>'+found[i]+'<') } </script> |
str = '{"http://habrahabr.ru/events/coming/":{"id": "http://habrahabr.ru/events/coming/","shares": 832},"http://habrahabr.ru/":{"id": "http://habrahabr.ru/","shares": 11}}'; num1 = str.match(/("shares":\s(\d+))|"shares":\s/g)[0] num2 = str.match(/("shares":\s(\d+))|"shares":\s/g)[1] alert("num1: "+num1+"\nnum2: "+num2) |
9xakep, попробуй заменить цифру на такую 832F
|
Deff,
ТС не написал, будет ли там буквы, а так добавить parseFloat не проблема. Или опять же регулярками вытаскивать тупо все что после shares, а потом парсить |
Цитата:
|
Зачем регулярка, если это JSON?
|
Kolyaj,
У мну например - такая задачка - типовая - к движку доступа нет |
К какому движку?
|
Kolyaj,
К тому, что json выдаёт - Не томи - Давай полный Спичь |
А зачем доступ к тому, что json выдаёт? В этой теме все бросились парсить json зачем-то регулярками, вместо того, чтобы сделать JSON.parse(txt)['http://habrahabr.ru/'].shares
|
Kolyaj, http://www.spravkaweb.ru/jscript/methods/jsonparse/
Для меня это новое, но судя по тому, что только прочёл, к этому блюду, нужны еще и проверки, Цитата:
|
Цитата:
|
Kolyaj,
Вы опытней... Наверняка применяли, если сказали а) - стоит наверно сказать и б) про подводные камни - если камней нет, то показали - пояснили, иначе похоже на красование.. Я методом не пользовался - поэтому имхо пока пользуюсь проверенным старым... -------------------------------------- Написано, что метод действует начиная с версии js 5.8, Дабы подключить в ИЕ, начиная только с 8 версии нужно перевести в режим "Internet Explorer 8 Standards". В других случаях, используется версия 5.7, не поддерживающая данный метод |
Я ж показал код.
Цитата:
|
Цитата:
|
Magneto, а если так:
var o = { "http://habrahabr.ru/": { "id": "http://habrahabr.ru/", "shares": 832 }, "http://habrahabr.ru/company/apps4all/blog/144705/": { "id": "http://habrahabr.ru/company/apps4all/blog/144705/", "shares": 11 } }; //как будто распарсили JSON alert( o[ Object.keys( o )[0] ].shares );? |
Цитата:
|
GuardCat - хорошее решение, спасибо.
Цитата:
P.S. Задачу давно решил. |
Часовой пояс GMT +3, время: 06:11. |