bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

RegExp: Скобочные группы и глобальный поиск?

Здравствуйте, подскажите пожалуйста. Есть такая задачка, многострочный текст, и нужно вырезать текст без пробелом между разделителями ":" и концом строки (концом текста). Что-то скобочные группы не работают в глобальном поиске ( и не подскажите где про это почитать в доках?
let str = "First:   231\nSecond:   some_text\nThirth: 88"
console.log(str.match(/(?::\s*)(.+)?$/mg)) # [ ':   231', ': some_text', ': 88' ]
#  а нужно что бы было
# [ '231', 'some_text', '88' ]


Спасибо.
  • Вопрос задан
  • 757 просмотров
Решения вопроса 1
lidacriss
@lidacriss
wtf
думаю, что в вашем случае можно заюзать такую конструкцию
console.log(str.match(/(?<=:).*$/mg).map(match => match.trim()))


п.с. используем "смотрящие" вперед/назад, чтобы не выхватывалось с помощью str.match()

UPD
Что-то скобочные группы не работают в глобальном поиске

и не подскажите где про это почитать в доках?


Метод match()
Метод match() возвращает получившиеся совпадения при сопоставлении строки с регулярным выражением.

т.е. все, что сопоставляется с регуляркой, не важно сколько групп и какие они
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@amr_now
Вариант, когда скобочные группы работают в глобальном поиске:
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
</head>
<body>
<script>
	let str = "First:   231\nSecond:   some_text\nThirth: 88"
	let reg = /:\s*(.*)$/gium;
	let obj = [];
	let i = 0;
	for(let match = reg.exec(str); match !=null; match = reg.exec(str))
	{
		obj[i++] = match[1];
	}
	console.log(obj);
	document.write("-------------");
</script>
</body>
</html>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы