#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"
]
Некоторые полезные приемы:
- используется
[sS]
для сопоставления любого символа - используйте
(?![sS])
для имитацииZ
Комментарии:
1. Спасибо за информацию. Это мне очень помогло!
2. Ссылка мертва, вот версия страницы из интернет-архива: web.archive.org/web/20120512092338/http ://…