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

Magneto 28.05.2012 19:19

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

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

Поэтому помогите ))

nerv_ 28.05.2012 19:31

var found = txt.match( /"shares":\s*\d+/gm );
// дальше сами )

nerv_ 28.05.2012 19:37

Magneto, видимо, мне следовало сразу добавить - про сохраняющие скобки в матче забудьте (при глобальном поиске).

Deff 28.05.2012 19:53

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

9xakep 28.05.2012 21:28

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)

Deff 28.05.2012 21:44

9xakep, попробуй заменить цифру на такую 832F

9xakep 28.05.2012 21:59

Deff,
ТС не написал, будет ли там буквы, а так добавить parseFloat не проблема. Или опять же регулярками вытаскивать тупо все что после shares, а потом парсить

Deff 28.05.2012 23:01

Цитата:

Сообщение от 9xakep
а так добавить parseFloat не проблема.

Cогласен - тады твой точнее - Поправил свой

Kolyaj 29.05.2012 16:36

Зачем регулярка, если это JSON?

Deff 29.05.2012 17:01

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


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