Помогите уточнить паттерн
Многострочный текст:
Код:
0 HEADКод:
(\d+)\s(\w*)\s*(.*)В результате к первой строке из двух групп добавляется вся третья строка. Подскажите решение, когда в строке может быть и две и три группы. |
Sergey_New,
какой результат вы хотите получить? |
Для каждой строки должно быть три группы, для первой строки третья группа д.б. пустая
|
Sergey_New,
могу только повторить вопрос или спросить какие проблемы? |
Должно получиться:
Строка1 Группа 1: 0 Группа 2: HEAD Группа 3: "" Строка2 Группа 1: 1 Группа 2: SOUR Группа 3: AGES Строка3 Группа 1: 2 Группа 2: VERS Группа 3: 2.0.4 |
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>
|
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,
не понимаю вас |
рони,
сам паттерн должен определять, если после второй группы нет текста, то нужно возвращать "", в другом случае возвращать третью группу. Т.е. типа: ((\d+)\s(\w*))|((\d+)\s(\w*)\s*(.*)) |
Нашел совет: Нужно использовать ленивый квантификатор.
Пока не разобрался где его применить. |
Похоже получилось:
(\d+)\s(\w*)\s*?(.*) |
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>
|
рони,
спасибо! |
Цитата:
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, время: 19:09. |