Регулярное выражение Javascript для нескольких вхождений

#javascript #regex

#javascript #регулярное выражение

Вопрос:

 var text = "pgPag.append('<li><a title="'   __('First')   '" href="#">amp;<amp;<</a></li>');            pgPag.append('<li><a title="'   __('Previous')   '" href="#">amp;<</a></li>');  pgPag.append('<li><label>amp;nbsp;'   __('Page')   'amp;nbsp;</label><input type="text" size="1" /><label>amp;nbsp;</label></li>');           pgPag.append('<li><a title="'   __('Next')   '" href="#">amp;></a></li>');            pgPag.append('<li><a title="'   __('Last')   '" href="#">amp;>amp;></a></li>');";
var exp = '(?:('[a-z]*'))';
var re = new RegExp(exp,["img"]);
var match = re.exec(text);
document.write(match);
  

Теперь, как я могу напечатать строку, которая начинается как «__ (» например. «Первый», «Предыдущий», «Страница»
С помощью приведенного выше кода я могу получить только первую строку, т.е «Первая», а не остальные строки.

Требуемый вывод :

Первая предыдущая страница Следующая последняя

Комментарии:

1. Для начала re.exec() возвращает массив, но вы обрабатываете его как строку.

Ответ №1:

Есть две проблемы:

Первый: вторым аргументом new RegExp(exp,["img"]); должна быть строка, а не массив. Поэтому:

 var re = new RegExp(exp, "img");
  

это то, что вам нужно. Или, еще лучше:

 var re = /(?:('[a-z]*'))/img // This is a regular expression literal
  

Второе: как сказал Майк: используйте text.match(re) , чтобы получить массив совпадений из всей строки. re.exec даст вам только одно совпадение за раз.

Ответ №2:

Вместо

 var match = re.exec(text);
  

сделать

 var matches = text.match(re);