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

Sergey_New 10.05.2016 19:57

Помогите уточнить паттерн
 
Многострочный текст:
Код:

0 HEAD
1 SOUR AGES
2 VERS 2.0.4

нужно разделить на три группы. Использую паттерн
Код:

(\d+)\s(\w*)\s*(.*)
с флагом m
В результате к первой строке из двух групп добавляется вся третья строка.
Подскажите решение, когда в строке может быть и две и три группы.

рони 10.05.2016 20:05

Sergey_New,
какой результат вы хотите получить?

Sergey_New 10.05.2016 20:11

Для каждой строки должно быть три группы, для первой строки третья группа д.б. пустая

рони 10.05.2016 20:16

Sergey_New,
могу только повторить вопрос или спросить какие проблемы?

Sergey_New 10.05.2016 20:23

Должно получиться:
Строка1
Группа 1: 0
Группа 2: HEAD
Группа 3: ""
Строка2
Группа 1: 1
Группа 2: SOUR
Группа 3: AGES
Строка3
Группа 1: 2
Группа 2: VERS
Группа 3: 2.0.4

рони 10.05.2016 20:44

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))
 a = a.match(/^(\d+)\s(\w*)\s*?(\S.*?)?$/gim)
 a = a.map(function(a) {
  return a.split(/\s+/)
});
  alert(JSON.stringify(a))
</script>
</body>
</html>

рони 10.05.2016 20:49

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 = a.match(/^(\S+)(\s\S+)+?$/gim)
 a = a.map(function(a) {
  return a.split(/\s+/)
});
  alert(JSON.stringify(a))
</script>
</body>
</html>

Sergey_New 10.05.2016 21:04

рони,
спасибо, код работает!
Скажите, а только паттерном без дополнительных функций этого сделать нельзя?

рони 10.05.2016 21:08

Цитата:

Сообщение от Sergey_New
Скажите, а только паттерном без дополнительных функций этого сделать нельзя?

не представляю даже о чём вы.

Sergey_New 10.05.2016 21:17

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


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