Как мы можем получить подмножество шаблонов с помощью регулярного выражения в JavaScript? - PullRequest
0 голосов
/ 16 ноября 2009
<script type='text/javascript'>

var str="('apple',16),('orange',7),('banana',12)";
var pattern=/\('([^']+)',([0-9]+)\)/gi;

var reg=new RegExp(pattern);
var arr=str.match(reg);

document.write(arr);

</script>

В приведенном выше javascript я использовал две пары скобок в шаблоне, чтобы указать данные, которые я хочу получить из строки. Очевидно, вы можете видеть, что я хочу получить строку и номер для каждого элемента. Я думаю, что после матча я должен получить такой массив:

arr[0][0] equals to ('apple',16)
arr[0][1] equals to apple
arr[0][2] equals to 16

arr[1][0] equals to ('orange',7)
arr[1][1] equals to orange
arr[1][2] equals to 7

... и т. Д.

но теперь полученное мной значение - это просто полное совпадение, например:

arr[0] equals to ('apple',16)
arr[1] equals to ('orange',7)

... и т. Д.

Почему и как я могу получить обратно массив, содержащий данные, которые я указал, используя скобки?

Ответы [ 3 ]

2 голосов
/ 16 ноября 2009

Вам нужно будет повторить и собрать, чтобы получить ожидаемые результаты

var str="('apple',16),('orange',7),('banana',12)";
var pattern=/\('([^']+)',([0-9]+)\)/gi;

var reg=new RegExp(pattern);

var arr = [];
while(match = reg.exec(str)) {
  arr[arr.length] = match;
}
2 голосов
/ 16 ноября 2009

Удалите «глобальную» (g) директиву.

В отличие от RegExp.exec (), когда вы вызываете String.match с шаблоном, использующим флаг "g", группы захвата не возвращаются, только полные совпадения.

Вы также можете вызвать exec () вместо этого к своему объекту регулярного выражения:

var arr=reg.exec(str);
1 голос
/ 16 ноября 2009

Что касается "почему", то просто так работает match (). Возвращает одномерный массив.

Я бы просто использовал str.split (","), чтобы получить список пар и перебрать результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...