Коли ви повторюєте групу захоплення, у більшості ароматів зберігається лише останній захоплення; будь-яке попереднє захоплення перезаписується. У якомусь смаку, наприклад .NET. Ви можете отримати всі проміжні захоплення, але це не так у випадку з Javascript.
Тобто, у Javascript, якщо у вас є шаблон із N групами захоплення, ви можете захопити лише N рядків за збіг, навіть якщо деякі з цих груп повторювались.
Отже, загалом кажучи, залежно від того, що вам потрібно зробити:
- Якщо це варіант, розділіть на роздільники
- Замість відповідності
/(pattern)+/
, можливо, збігатися /pattern/g
, можливо, у exec
циклі
- Зверніть увагу, що ці два не зовсім рівнозначні, але це може бути варіант
- Виконайте багаторівневу відповідність:
- Захоплення повторної групи за один матч
- Потім запустіть ще один регулярний вираз, щоб розірвати цей збіг
Список літератури
Приклад
Ось приклад відповідності <some;words;here>
в тексті, використання exec
циклу, а потім розподіл, ;
щоб отримати окремі слова ( див. Також на ideone.com ):
var text = "a;b;<c;d;e;f>;g;h;i;<no no no>;j;k;<xx;yy;zz>";
var r = /<(\w+(;\w+)*)>/g;
var match;
while ((match = r.exec(text)) != null) {
print(match[1].split(";"));
}
Використовуваний шаблон:
_2__
/ \
<(\w+(;\w+)*)>
\__________/
1
Це відповідає <word>
, <word;another>
, <word;another;please>
і т.д. Група 2 повторюється , щоб захопити будь-яку кількість слів, але він може тримати тільки останній захоплення. Весь список слів охоплений групою 1; тоді цей рядок знаходиться split
на роздільнику з комою.
Пов’язані запитання