Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите уточнить паттерн (https://javascript.ru/forum/misc/62976-pomogite-utochnit-pattern.html)

рони 10.05.2016 21:23

Sergey_New,
не понимаю вас

Sergey_New 10.05.2016 21:43

рони,
сам паттерн должен определять, если после второй группы нет текста, то нужно возвращать "", в другом случае возвращать третью группу. Т.е. типа:
((\d+)\s(\w*))|((\d+)\s(\w*)\s*(.*))

Sergey_New 10.05.2016 21:52

Нашел совет: Нужно использовать ленивый квантификатор.
Пока не разобрался где его применить.

Sergey_New 10.05.2016 21:59

Похоже получилось:
(\d+)\s(\w*)\s*?(.*)

рони 10.05.2016 22:04

Sergey_New,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
<textarea name="">
0 HEAD
1 SOUR AGES
2 VERS 2.0.4
</textarea>
<script>
  var a = document.querySelector("textarea").value, k = [];
  a.replace(/^(\d+)\s(\w*)\s*?((\S.*?)?$)/gim, function(s,a,b,c) {
   k.push([a,b,c])
   return s
});
alert(JSON.stringify(k))

</script>
</body>
</html>

Sergey_New 10.05.2016 22:44

рони,
спасибо!

Vlasenko Fedor 10.05.2016 23:07

Цитата:

Сообщение от Sergey_New
Например, использовать | (или) для определения третьей группы в паттерне

Вариант
var str = '0 HEAD\n\
1 SOUR AGES\n\
2 VERS 2.0.4';
var res = str.replace(/(\d+) (\w+)( (.*(\n|$)))?/g, 'Группа 1: $1\nГруппа 2: $2\nГруппа 3: $4');
alert(res);


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