Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.05.2012, 19:19
Аватар для Magneto
Люмус, Емаксос Developer!
Отправить личное сообщение для Magneto Посмотреть профиль Найти все сообщения от Magneto
 
Регистрация: 06.05.2010
Сообщений: 677

Ругулярные выражения.
Есть следующий текстовый документ:
{
   "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), если есть

Но как оказалось все не так, постоянно возвращается непонятная фигня.

Поэтому помогите ))
Ответить с цитированием
  #2 (permalink)  
Старый 28.05.2012, 19:31
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

var found = txt.match( /"shares":\s*\d+/gm );
// дальше сами )
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 28.05.2012, 19:37
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Magneto, видимо, мне следовало сразу добавить - про сохраняющие скобки в матче забудьте (при глобальном поиске).
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 28.05.2012 в 19:41.
Ответить с цитированием
  #4 (permalink)  
Старый 28.05.2012, 19:53
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

<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>

Последний раз редактировалось Deff, 29.05.2012 в 13:19.
Ответить с цитированием
  #5 (permalink)  
Старый 28.05.2012, 21:28
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

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, 28.05.2012 в 21:34.
Ответить с цитированием
  #6 (permalink)  
Старый 28.05.2012, 21:44
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

9xakep, попробуй заменить цифру на такую 832F
Ответить с цитированием
  #7 (permalink)  
Старый 28.05.2012, 21:59
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Deff,
ТС не написал, будет ли там буквы, а так добавить parseFloat не проблема. Или опять же регулярками вытаскивать тупо все что после shares, а потом парсить
__________________
оляля, ололо
Ответить с цитированием
  #8 (permalink)  
Старый 28.05.2012, 23:01
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от 9xakep
а так добавить parseFloat не проблема.
Cогласен - тады твой точнее - Поправил свой
Ответить с цитированием
  #9 (permalink)  
Старый 29.05.2012, 16:36
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Зачем регулярка, если это JSON?
Ответить с цитированием
  #10 (permalink)  
Старый 29.05.2012, 17:01
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Kolyaj,
У мну например - такая задачка - типовая - к движку доступа нет
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения для javascript qwert_ukg Общие вопросы Javascript 3 20.04.2012 13:45
Вычисление значения выражения без eval Matre Общие вопросы Javascript 6 19.11.2011 12:04
нежадные регулярные выражения KOLANICH Общие вопросы Javascript 2 12.12.2010 01:08
While как условные выражения Latro Общие вопросы Javascript 23 27.06.2010 14:53
Функции поиска и замены строк или регулярные выражения? Armen Общие вопросы Javascript 1 01.01.2010 12:35