Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как получать вхождения при поиске по регулярному выражению (https://javascript.ru/forum/misc/37321-kak-poluchat-vkhozhdeniya-pri-poiske-po-regulyarnomu-vyrazheniyu.html)

nixml 15.04.2013 18:14

Как получать вхождения при поиске по регулярному выражению
 
Есть к примеру регулярное выражение
/\[name1=([^\]]*)\](([\S\s])*?)\[\/name1\]/g

и есть строка [name1=name3]text[/name1]

что мне нужно с этим всем сделать, чтобы вытащить из строки name3 и text?

SV0L0CH 15.04.2013 18:21

Выделить каждый ткой фрагмент и применить ту же регулярку, но без флага 'g'.

rgl 15.04.2013 18:49

var s = "[name1=xxxx]yyyy[/name1]";
var re = /\[([^=]+)=([^\]]+)\]([^[]*)\[\/\1\]/;
var res = s.match(re);
alert( res[2] );
alert( res[3] );

Aetae 15.04.2013 18:52

Цитата:

Сообщение от SV0L0CH (Сообщение 246364)
Выделить каждый ткой фрагмент и применить ту же регулярку, но без флага 'g'.

Не обязательно выделять вручную: exec.

rgl 15.04.2013 18:53

var s = "[name1=xxxx]yyyy[/name1]";
var re = /\[name1=([^\]]+)\]([^\[]*)\[\/name1\]/;
var res = s.match(re);
alert( res[1] );
alert( res[2] );

SV0L0CH 15.04.2013 19:00

var s = "[name1=xxxx0]yyyy0[/name1]zzzz[name1=xxxx1]yyyy2[/name1]zzzz[name1=xxxx3]yyyy3[/name1]";
alert(JSON.stringify(s.match(/\[name1=([^\]]+)\]([^\[]*)\[\/name1\]/g).map(function(a){
  var x = /\[name1=([^\]]+)\]([^\[]*)\[\/name1\]/.exec(a);
  x.shift();
  return x;
})));

Aetae 15.04.2013 19:05

Цитата:

Сообщение от SV0L0CH (Сообщение 246369)
var s = "[name1=xxxx0]yyyy0[/name1]zzzz[name1=xxxx1]yyyy2[/name1]zzzz[name1=xxxx3]yyyy3[/name1]";
alert(JSON.stringify(s.match(/\[name1=([^\]]+)\]([^\[]*)\[\/name1\]/g).map(function(a){
  var x = /\[name1=([^\]]+)\]([^\[]*)\[\/name1\]/.exec(a);
  x.shift();
  return x;
})));

SV0L0CH, наркоман штоле?

Код практически из примера по моей ссылке:
var myRe = /\[name1=([^\]]*)\]([\S\s]*?)\[\/name1\]/g;
var str = "[name1=xxxx0]yyyy0[/name1]zzzz[name1=xxxx1]yyyy2[/name1]zzzz[name1=xxxx]yyyy[/name1]";
var myArray, result = [];
while ((myArray = myRe.exec(str)) != null)
{
  result.push(myArray);
}

alert(result.join('\n'))

И никаких маразматических лишних телодвижений.
А ответ один: безблагодат lastIndex.

SV0L0CH 15.04.2013 19:18

Понял! При использовании exec флаг g не влияет на результат.

nixml 15.04.2013 19:51

Спасибо всем, попробую разобраться, просто я только начал учить язык.


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