Создать массив совпадений регулярных выражений (многострочный, javascript)

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Я хочу создать массив строки соответствия регулярному выражению javascript из приведенного ниже текста.

 .root
 this is root
..child 1
 this is child 1
 this is also child 1's content.
...child 1-1
 this is child 1-1

..child 2
 this is child 2
...child 2-1
 this is child 2-1
.root 2
 this is root 2
 

и желаемый массив находится ниже

 array[0] = ".root
 this is root"

array[1] = "..child 1
 this is child 1
 this is also child 1's content"

array[2] = "...child 1-1
 this is child 1-1
"

array[3] = "..child 2
 this is child 2"

array[4] = "...child 2-1
 this is child 2-1"

array[5] = ".root 2
 this is root 2"
 

В Java я могу сделать подобное ^..*?(?=(^.|Z)) , но в Javascript нет Z , . не соответствует символу новой строки и $ соответствует символу новой строки (а не только концу строки).

Как я могу получить этот массив?
Я использую этот сайт ( http://www.gethifi.com/tools/regex ) для проверки регулярного выражения.

Комментарии:

1. Кстати, $ будет соответствовать только концу строки, если вы не добавите m флаг. Например, /foo$/m будет соответствовать «foo» в «foo nbar», но /foo$/ не будет.

Ответ №1:

text.split(/r?n^(?=.)/gm) создает тот же массив.

text.match(/^..*(r?n[^.].*)*/gm) некрасиво, но все же.

Комментарии:

1. О, это работает! Я не придумал использовать split! большое вам спасибо.

Ответ №2:

Здесь это в одном регулярном выражении:

 var re = /^[.][sS]*?(?:(?=r?n[.])|(?![sS]))/gm
var match
var matches = []
while (match = re.exec(text)) {
  matches.push(match[0])
}
console.log(matches)
 

результаты:

 [
  ".rootnthis is root",
  "..child 1n this is child 1n this is also child 1's content.",
  "...child 1-1n this is child 1-1n",
  "..child 2n this is child 2",
  "...child 2-1n this is child 2-1",
  ".root 2n this is root 2"
]
 

Некоторые полезные приемы:

Комментарии:

1. Спасибо за информацию. Это мне очень помогло!

2. Ссылка мертва, вот версия страницы из интернет-архива: web.archive.org/web/20120512092338/http ://…